andygrove opened a new issue, #6616:
URL: https://github.com/apache/datafusion-comet/issues/6616

   Part of #6615.
   
   ### Describe the bug
   
   `query tolerance=X` in Comet SQL tests compares results with 
`CometTestBase.checkAnswerWithTolerance`. So do the Scala helpers 
`checkSparkAnswerWithTolerance` and `checkSparkAnswerAndOperatorWithTolerance`. 
That comparison has three gaps:
   
   1. **NaN.** It skips the comparison when either side is NaN (`else if 
(!actual.isNaN && !expected.isNaN)`). Comet returning NaN where Spark returns a 
number passes, and so does the reverse.
   2. **Infinity sign.** It accepts `+Infinity` against `-Infinity` 
(`assert(actual.isInfinity == expected.isInfinity)`). The contributor guide 
documents this, but nothing needs it.
   3. **Row order.** It zips the two collected results in collect order. The 
exact path, `checkCometAnswer`, sorts both sides when the plan has no `Sort`; 
this one does not. A query without `ORDER BY` therefore pairs rows by whatever 
order each engine returned them in.
   
   Because of the first gap, NaN results under tolerance are never compared:
   
   - **Math fixtures:** every per-function fixture runs its NaN-producing 
inputs only under `tolerance=`. That covers `sqrt(-1.0)`, `acos(2)`, 
`sin(Infinity)` and NaN input in `acos`, `asin`, `atan`, `atan2`, `cos`, 
`cosh`, `cot`, `exp`, `expm1`, `log`, `log10`, `log2`, `sin`, `sinh`, `sqrt`, 
`tan` and `tanh`.
   - **Aggregate fixtures:**
     - `aggregate/corr.sql` `test_corr_nan` ("Test permutations of NULL and 
NaN") exists only to check NaN results, so it checks nothing for those rows.
     - `avg.sql` `test_avg_special` and the Infinity rows in `sum.sql` have the 
same problem.
   - **Scala tests:** the math tests that use these helpers have the same blind 
spot.
   
   ### Expected behavior
   
   - NaN matches only NaN.
   - Infinities compare with their sign.
   - Both sides are sorted the way the exact path sorts them when the plan has 
no `Sort`.
   - Signed zero can stay lenient under tolerance, but the contributor guide 
should say so.
   
   Fixing this may expose real mismatches in the fixtures above. Treat those as 
Comet bugs: file each one and mark the query `ignore(<link>)`. Don't loosen the 
check.
   
   This blocks the math and aggregate parts of the epic: their conversions move 
NaN and infinity results into plain `query` blocks, and the remaining tolerance 
queries should be trustworthy.
   
   ### Additional context
   
   Found while auditing the Scala expression suites against the SQL fixtures 
for #6615, on `main` at 3bc2faa934.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to