[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Testing expression (RexNode) transformations

Looks awesome! Thanks Julian and Zoltan!
Michael Mior

Le mar. 29 mai 2018 à 15:36, Julian Hyde <jhyde@xxxxxxxxxx> a écrit :

> With Zoltan’s help, I just committed [1] a nice change to RexSimplify,
> adding a “paranoid” flag. If you set paranoid = true, then RexSimplify will
> simplify expressions but it will also try to prove that the transformation
> is wrong. It does that by assigning sample values to variables and checking
> that the simplified expression produces the same result as the original
> expression.
> Consider the expression
>   (not a) and (b > 5) and (not true)
> This simplifies to “false”, because of the trailing “not true”. “a” is
> boolean, so we use sample values {unknown, false, true}; “b” is an integer,
> so we use values {null, 0, 1, 1,000,000}. For the 15 (3 x 5) combinations
> of assignments to variables (a, b), we evaluate the original expression and
> the simplified expression, and make sure they give the same result. If the
> result is different, we have proved that the simplification is invalid. I
> already found one bug [2] this way.
> I added RexInterpreter (which evaluates RexNode expressions by
> interpreting, rather than by generating Java as RexExecutor does) because I
> didn’t want to increase coupling.
> One area this could be improved is to add more values based on the
> expression. Because the integer literal 5 is present, we ought to check
> values {4, 5, 6} in addition to the default values {null, -1, 0, 1,
> 1,000,000}.
> It’s really important that our transformation rules can be trusted, so
> please use this functionality as much as you can in tests. If you your
> transformation does not use RexSimplify, you can use RexAnalyzer directly.
> Also, add more tests for rex transformations; each test gives RexSimplifier
> a lot of opportunities to find faults.
> Julian
> [1] https://issues.apache.org/jira/browse/CALCITE-2314 <
> https://issues.apache.org/jira/browse/CALCITE-2314>
> [2] https://issues.apache.org/jira/browse/CALCITE-2332 <
> https://issues.apache.org/jira/browse/CALCITE-2332>