# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "fp_math" description: "Tests for floating-point math." section { name: "fp_math" description: "Simple tests for floating point." test { name: "add_positive_positive" expr: "4.25 + 15.25" value: { double_value: 19.5 } } test { name: "add_positive_negative" expr: "17.75 + (-7.75)" value: { double_value: 10 } } test { name: "add_negative_negative" expr: "-4.125 + (-2.125)" value: { double_value: -6.25 } } test { name: "sub_positive_positive" expr: "42.0 - 12.0" value: { double_value: 30 } } test { name: "sub_positive_negative" expr: "42.875 - (-22.0)" value: { double_value: 64.875 } } test { name: "sub_negative_negative" expr: "-4.875 - (-0.125)" value: { double_value: -4.75 } } test { name: "multiply_positive_positive" expr: "42.5 * 0.2" value: { double_value: 8.5 } } test { name: "multiply_positive_negative" expr: "40.75 * (-2.25)" value: { double_value: -91.6875 } } test { name: "multiply_negative_negative" expr: "-3.0 * (-2.5)" value: { double_value: 7.5 } } test { name: "divide_positive_positive" expr: "0.0625 / 0.002" value: { double_value: 31.25 } } test { name: "divide_positive_negative" expr: "-2.0 / 2.0" value: { double_value: -1 } } test { name: "divide_negative_negative" expr: "-8.875 / (-0.0625)" value: { double_value: 142 } } test { name: "mod_not_support" expr: "47.5 % 5.5" disable_check: true eval_error: { errors: { message:"found no matching overload for '_%_' applied to '(double, double)'" } } } test { name: "negative" expr: "-(4.5)" value: { double_value: -4.5 } } test { name: "double_negative" expr: "-(-1.25)" value: { double_value: 1.25 } } test { name: "negative_zero" expr: "-(0.0)" value: { double_value: -0.0 } } test { name: "divide_zero" expr: "15.75 / 0.0" value: { double_value: Infinity } } test { name: "multiply_zero" expr: "15.36 * 0.0" value: { double_value: 0 } } test { name: "add_left_identity" expr: "0.0 + 1.75" value: { double_value: 1.75} } test { name: "add_right_identity" expr: " 2.5 + 0.0" value: { double_value: 2.5 } } test { name: "add_commutative" expr: "7.5 + 1.5 == 1.5 + 7.5" value: { bool_value: true } } test { name: "add_associative" expr: "5.625 + (15.75 + 2.0) == (5.625 + 15.75) + 2.0" value: { bool_value: true } } test { name: "mul_left_identity" expr: "1.0 * 45.25" value: { double_value: 45.25 } } test { name: "mul_right_identity" expr: "-25.25 * 1.0" value: { double_value: -25.25 } } test { name: "mul_commutative" expr: "1.5 * 25.875 == 25.875 * 1.5" value: { bool_value: true } } test { name: "mul_associative" expr: "1.5 * (23.625 * 0.75) == (1.5 * 23.625) * 0.75" value: { bool_value: true } } test { name: "add_mul_distribute" expr: "5.75 * (1.5 + 2.5) == 5.75 * 1.5 + 5.75 * 2.5" ## overflow or underflow may cause this not equal. value: { bool_value: true } } test { name: "fp_overflow_positive" description: "DBL_MAX(2^1023) times two" expr: "2.0 * 8.988466e+307 " value: {double_value: inf} } test { name: "fp_overflow_negative" description: "-DBL_MAX(-2^1023) times two" expr: "2.0 * -8.988466e+307 " value: {double_value: -inf} } test { name: "fp_underflow" description: "DBL_MIN(2^-1074) divided by two" expr: "1e-324 / 2.0" ## Expect it to be the closest number to the exact result. value: {double_value: 0} } }