LSL-PyOptimizer/unit_tests/regression.suite/parens.lsl
Sei Lisa ec509b3840 Fix parenthesization of unary minus
The algorithm for adding parentheses around unary operators was not working properly. It converted a * (-b) * c into a * -b * c, which LSL handles as a * -(b * c).

Fix and add test cases for that. One of the test cases shows an example where the difference matters: 0 * (-1e20) * 1e20 should result in 0.0, but if wrongly parenthesized, it gives NaN, because 1e20*1e20 gives infinity due to float overflow, and minus infinity times 0 is indeterminate.

The addition of parentheses has been improved, but it still does not eliminate every redundant parenthesis.

Also fix the horrendous typo of using "operands" where it should be "operators".
2019-05-04 23:20:20 +02:00

17 lines
280 B
Text

[ (-3) * 4
, -3 * 4
, -(3 * 4)
, ~-3 * 4
, -~3 * 4 | (~(-3) * 4 & (-(~3)*4 | -~(3 * 4))) | - -3
, (3 * ~-4) * 5
, 3 * ~-4 * 5
, 3 * (~-4) * 5
, 3 * ~(-4) * 5
, 3 * ~(-4 * 5)
, 3 * (-~4) * 5
, 3 * -(~4) * 5
, 3 * -(~4 * 5)
, 3 * -~(4 * 5)
, 0 * (-1e20) * 1e20
, 0 * -1e20 * 1e20
]