Skip to content

Commit 14b5797

Browse files
committed
chore: add array tests with NaN handling
1 parent b26a8df commit 14b5797

6 files changed

Lines changed: 161 additions & 5 deletions

File tree

spark/src/test/resources/sql-tests/expressions/array/array_distinct.sql

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,12 @@ statement
115115
INSERT INTO test_array_distinct_double VALUES
116116
(array(1.123, 0.1234, 1.121, 1.123, 0.1234)),
117117
(NULL),
118-
(array(NULL, 1.0, NULL, 2.0))
118+
(array(NULL, 1.0, NULL, 2.0)),
119+
(array(CAST('NaN' AS DOUBLE), CAST('NaN' AS DOUBLE))),
120+
(array(CAST('NaN' AS DOUBLE), CAST('NaN' AS DOUBLE), 1.0, 1.0)),
121+
(array(CAST('NaN' AS DOUBLE), NULL, CAST('NaN' AS DOUBLE), NULL, 1.0)),
122+
(array(CAST('Infinity' AS DOUBLE), CAST('-Infinity' AS DOUBLE), CAST('Infinity' AS DOUBLE), 0.0)),
123+
(array(0.0, -0.0, 1.0))
119124

120125
query
121126
SELECT array_distinct(arr) FROM test_array_distinct_double
@@ -145,7 +150,12 @@ statement
145150
INSERT INTO test_array_distinct_float VALUES
146151
(array(CAST(1.123 AS FLOAT), CAST(0.1234 AS FLOAT), CAST(1.121 AS FLOAT), CAST(1.123 AS FLOAT))),
147152
(NULL),
148-
(array(CAST(NULL AS FLOAT), CAST(1.0 AS FLOAT), CAST(NULL AS FLOAT)))
153+
(array(CAST(NULL AS FLOAT), CAST(1.0 AS FLOAT), CAST(NULL AS FLOAT))),
154+
(array(CAST('NaN' AS FLOAT), CAST('NaN' AS FLOAT))),
155+
(array(CAST('NaN' AS FLOAT), CAST('NaN' AS FLOAT), CAST(1.0 AS FLOAT))),
156+
(array(CAST('NaN' AS FLOAT), NULL, CAST('NaN' AS FLOAT), NULL, CAST(1.0 AS FLOAT))),
157+
(array(CAST('Infinity' AS FLOAT), CAST('-Infinity' AS FLOAT), CAST('Infinity' AS FLOAT), CAST(0.0 AS FLOAT))),
158+
(array(CAST(0.0 AS FLOAT), CAST(-0.0 AS FLOAT), CAST(1.0 AS FLOAT)))
149159

150160
query
151161
SELECT array_distinct(arr) FROM test_array_distinct_float

spark/src/test/resources/sql-tests/expressions/array/array_except.sql

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,40 @@ SELECT array_except(array(1, 2, 3), b) FROM test_array_except
3737
-- literal + literal
3838
query ignore(https://github.com/apache/datafusion-comet/issues/3646)
3939
SELECT array_except(array(1, 2, 3), array(2, 3, 4)), array_except(array(1, 2), array()), array_except(array(), array(1)), array_except(cast(NULL as array<int>), array(1))
40+
41+
-- double arrays with NaN/Infinity/-0.0
42+
statement
43+
CREATE TABLE test_except_dbl(a array<double>, b array<double>) USING parquet
44+
45+
statement
46+
INSERT INTO test_except_dbl VALUES
47+
(array(1.0, 2.0, double('NaN')), array(2.0, double('NaN'))),
48+
(array(double('NaN'), 1.0, 2.0), array(1.0)),
49+
(array(double('NaN'), double('NaN'), 1.0), array(double('NaN'))),
50+
(array(1.0, 2.0), array(double('NaN'))),
51+
(array(double('NaN'), 1.0), array(2.0)),
52+
(array(double('Infinity'), 1.0, double('-Infinity')), array(double('Infinity'))),
53+
(array(double('Infinity'), double('-Infinity')), array(double('-Infinity'))),
54+
(array(0.0, -0.0, 1.0), array(0.0)),
55+
(array(0.0, 1.0), array(-0.0)),
56+
(array(1.0, 2.0, NULL), array(2.0, NULL)),
57+
(array(double('NaN'), NULL), array(NULL))
58+
59+
query
60+
SELECT a, b, array_except(a, b) FROM test_except_dbl
61+
62+
-- float arrays with NaN/Infinity/-0.0
63+
statement
64+
CREATE TABLE test_except_float(a array<float>, b array<float>) USING parquet
65+
66+
statement
67+
INSERT INTO test_except_float VALUES
68+
(array(cast(1.0 as float), cast(2.0 as float), float('NaN')), array(cast(2.0 as float), float('NaN'))),
69+
(array(float('NaN'), float('NaN'), cast(1.0 as float)), array(float('NaN'))),
70+
(array(cast(1.0 as float), cast(2.0 as float)), array(float('NaN'))),
71+
(array(float('Infinity'), cast(1.0 as float), float('-Infinity')), array(float('Infinity'))),
72+
(array(cast(0.0 as float), cast(-0.0 as float), cast(1.0 as float)), array(cast(0.0 as float))),
73+
(array(cast(1.0 as float), cast(2.0 as float), NULL), array(cast(2.0 as float), NULL))
74+
75+
query
76+
SELECT a, b, array_except(a, b) FROM test_except_float

spark/src/test/resources/sql-tests/expressions/array/array_intersect.sql

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,15 @@ statement
125125
CREATE TABLE test_intersect_float(a array<float>, b array<float>) USING parquet
126126

127127
statement
128-
INSERT INTO test_intersect_float VALUES (array(1.5, 2.5, float('NaN')), array(2.5, float('NaN'))), (array(float('Infinity'), 1.0, float('-Infinity')), array(float('Infinity'), float('-Infinity'))), (array(cast(0.0 as float), cast(-0.0 as float)), array(cast(0.0 as float)))
128+
INSERT INTO test_intersect_float VALUES
129+
(array(1.5, 2.5, float('NaN')), array(2.5, float('NaN'))),
130+
(array(float('NaN'), float('NaN'), 1.0), array(float('NaN'))),
131+
(array(float('NaN'), 1.0, 2.0), array(float('NaN'), 2.0)),
132+
(array(float('NaN'), 1.0), array(2.0, 3.0)),
133+
(array(1.0, 2.0), array(float('NaN'))),
134+
(array(float('NaN'), NULL), array(float('NaN'), NULL)),
135+
(array(float('Infinity'), 1.0, float('-Infinity')), array(float('Infinity'), float('-Infinity'))),
136+
(array(cast(0.0 as float), cast(-0.0 as float)), array(cast(0.0 as float)))
129137

130138
query
131139
SELECT a, b, array_intersect(a, b) FROM test_intersect_float
@@ -135,7 +143,16 @@ statement
135143
CREATE TABLE test_intersect_dbl(a array<double>, b array<double>) USING parquet
136144

137145
statement
138-
INSERT INTO test_intersect_dbl VALUES (array(1.0, 2.0, double('NaN')), array(2.0, double('NaN'))), (array(double('Infinity'), 1.0, double('-Infinity')), array(double('Infinity'), double('-Infinity'))), (array(0.0, -0.0), array(0.0)), (array(1.0, 2.0, NULL), array(1.0, NULL))
146+
INSERT INTO test_intersect_dbl VALUES
147+
(array(1.0, 2.0, double('NaN')), array(2.0, double('NaN'))),
148+
(array(double('NaN'), double('NaN'), 1.0), array(double('NaN'))),
149+
(array(double('NaN'), 1.0, 2.0), array(double('NaN'), 2.0)),
150+
(array(double('NaN'), 1.0), array(2.0, 3.0)),
151+
(array(1.0, 2.0), array(double('NaN'))),
152+
(array(double('NaN'), NULL), array(double('NaN'), NULL)),
153+
(array(double('Infinity'), 1.0, double('-Infinity')), array(double('Infinity'), double('-Infinity'))),
154+
(array(0.0, -0.0), array(0.0)),
155+
(array(1.0, 2.0, NULL), array(1.0, NULL))
139156

140157
query
141158
SELECT a, b, array_intersect(a, b) FROM test_intersect_dbl

spark/src/test/resources/sql-tests/expressions/array/array_max.sql

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,44 @@ SELECT array_max(arr) FROM test_array_max
2727
-- literal arguments
2828
query
2929
SELECT array_max(array(1, 2, 3)), array_max(array()), array_max(cast(NULL as array<int>))
30+
31+
-- ===== DOUBLE arrays with NaN/Infinity/-0.0 =====
32+
33+
statement
34+
CREATE TABLE test_array_max_double(arr array<double>) USING parquet
35+
36+
statement
37+
INSERT INTO test_array_max_double VALUES
38+
(array(CAST('NaN' AS DOUBLE), 1.0, 2.0)),
39+
(array(1.0, CAST('NaN' AS DOUBLE), 2.0)),
40+
(array(1.0, 2.0, CAST('NaN' AS DOUBLE))),
41+
(array(CAST('NaN' AS DOUBLE), CAST('NaN' AS DOUBLE))),
42+
(array(CAST('NaN' AS DOUBLE), NULL, 1.0)),
43+
(array(CAST('Infinity' AS DOUBLE), 1.0, 2.0)),
44+
(array(CAST('-Infinity' AS DOUBLE), 1.0, 2.0)),
45+
(array(CAST('NaN' AS DOUBLE), CAST('Infinity' AS DOUBLE), CAST('-Infinity' AS DOUBLE))),
46+
(array(0.0, -0.0, 1.0)),
47+
(NULL),
48+
(array())
49+
50+
query
51+
SELECT array_max(arr) FROM test_array_max_double
52+
53+
-- ===== FLOAT arrays with NaN/Infinity/-0.0 =====
54+
55+
statement
56+
CREATE TABLE test_array_max_float(arr array<float>) USING parquet
57+
58+
statement
59+
INSERT INTO test_array_max_float VALUES
60+
(array(CAST('NaN' AS FLOAT), CAST(1.0 AS FLOAT), CAST(2.0 AS FLOAT))),
61+
(array(CAST('NaN' AS FLOAT), CAST('NaN' AS FLOAT))),
62+
(array(CAST('NaN' AS FLOAT), NULL, CAST(1.0 AS FLOAT))),
63+
(array(CAST('Infinity' AS FLOAT), CAST(1.0 AS FLOAT))),
64+
(array(CAST('-Infinity' AS FLOAT), CAST(1.0 AS FLOAT))),
65+
(array(CAST(0.0 AS FLOAT), CAST(-0.0 AS FLOAT))),
66+
(NULL),
67+
(array())
68+
69+
query
70+
SELECT array_max(arr) FROM test_array_max_float

spark/src/test/resources/sql-tests/expressions/array/array_min.sql

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,44 @@ SELECT array_min(arr) FROM test_array_min
2727
-- literal arguments
2828
query
2929
SELECT array_min(array(1, 2, 3)), array_min(array()), array_min(cast(NULL as array<int>))
30+
31+
-- ===== DOUBLE arrays with NaN/Infinity/-0.0 =====
32+
33+
statement
34+
CREATE TABLE test_array_min_double(arr array<double>) USING parquet
35+
36+
statement
37+
INSERT INTO test_array_min_double VALUES
38+
(array(CAST('NaN' AS DOUBLE), 1.0, 2.0)),
39+
(array(1.0, CAST('NaN' AS DOUBLE), 2.0)),
40+
(array(1.0, 2.0, CAST('NaN' AS DOUBLE))),
41+
(array(CAST('NaN' AS DOUBLE), CAST('NaN' AS DOUBLE))),
42+
(array(CAST('NaN' AS DOUBLE), NULL, 1.0)),
43+
(array(CAST('Infinity' AS DOUBLE), 1.0, 2.0)),
44+
(array(CAST('-Infinity' AS DOUBLE), 1.0, 2.0)),
45+
(array(CAST('NaN' AS DOUBLE), CAST('Infinity' AS DOUBLE), CAST('-Infinity' AS DOUBLE))),
46+
(array(0.0, -0.0, 1.0)),
47+
(NULL),
48+
(array())
49+
50+
query
51+
SELECT array_min(arr) FROM test_array_min_double
52+
53+
-- ===== FLOAT arrays with NaN/Infinity/-0.0 =====
54+
55+
statement
56+
CREATE TABLE test_array_min_float(arr array<float>) USING parquet
57+
58+
statement
59+
INSERT INTO test_array_min_float VALUES
60+
(array(CAST('NaN' AS FLOAT), CAST(1.0 AS FLOAT), CAST(2.0 AS FLOAT))),
61+
(array(CAST('NaN' AS FLOAT), CAST('NaN' AS FLOAT))),
62+
(array(CAST('NaN' AS FLOAT), NULL, CAST(1.0 AS FLOAT))),
63+
(array(CAST('Infinity' AS FLOAT), CAST(1.0 AS FLOAT))),
64+
(array(CAST('-Infinity' AS FLOAT), CAST(1.0 AS FLOAT))),
65+
(array(CAST(0.0 AS FLOAT), CAST(-0.0 AS FLOAT))),
66+
(NULL),
67+
(array())
68+
69+
query
70+
SELECT array_min(arr) FROM test_array_min_float

spark/src/test/resources/sql-tests/expressions/array/array_union.sql

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,21 @@ statement
103103
CREATE TABLE test_union_dbl(a array<double>, b array<double>) USING parquet
104104

105105
statement
106-
INSERT INTO test_union_dbl VALUES (array(1.0, 2.0), array(2.0, 3.0)), (array(1.0, double('NaN')), array(double('NaN'), 2.0)), (array(double('Infinity'), 1.0), array(double('Infinity'))), (array(double('-Infinity')), array(double('Infinity'))), (array(0.0), array(-0.0)), (array(1.0, NULL), array(2.0, NULL))
106+
INSERT INTO test_union_dbl VALUES (array(1.0, 2.0), array(2.0, 3.0)), (array(1.0, double('NaN')), array(double('NaN'), 2.0)), (array(double('NaN'), 1.0), array(2.0, 3.0)), (array(1.0, 2.0), array(double('NaN'), 3.0)), (array(double('NaN'), double('NaN')), array(double('NaN'))), (array(double('Infinity'), 1.0), array(double('Infinity'))), (array(double('-Infinity')), array(double('Infinity'))), (array(0.0), array(-0.0)), (array(1.0, NULL), array(2.0, NULL))
107107

108108
query
109109
SELECT a, b, array_union(a, b) FROM test_union_dbl
110110

111+
-- float arrays with special values
112+
statement
113+
CREATE TABLE test_union_float(a array<float>, b array<float>) USING parquet
114+
115+
statement
116+
INSERT INTO test_union_float VALUES (array(cast(1.0 as float), cast(2.0 as float)), array(cast(2.0 as float), cast(3.0 as float))), (array(cast(1.0 as float), float('NaN')), array(float('NaN'), cast(2.0 as float))), (array(float('NaN'), float('NaN')), array(float('NaN'))), (array(float('Infinity'), cast(1.0 as float)), array(float('Infinity'))), (array(float('-Infinity')), array(float('Infinity'))), (array(cast(0.0 as float)), array(cast(-0.0 as float))), (array(cast(1.0 as float), NULL), array(cast(2.0 as float), NULL))
117+
118+
query
119+
SELECT a, b, array_union(a, b) FROM test_union_float
120+
111121
-- boolean arrays
112122
query
113123
SELECT array_union(array(true, false), array(false)) FROM test_union_dbl

0 commit comments

Comments
 (0)