@@ -88,15 +88,107 @@ TEST_F(TestBooleanValidityKernels, ScalarIsNull) {
8888 CheckScalarUnary (" is_null" , MakeNullScalar (float64 ()), MakeScalar (true ));
8989}
9090
91+ TEST_F (TestFloatValidityKernels, FloatArrayIsFinite) {
92+ // All Inf
93+ CheckScalarUnary (" is_finite" , ArrayFromJSON (float32 (), " [Inf, -Inf, Inf, -Inf, Inf]" ),
94+ ArrayFromJSON (boolean (), " [false, false, false, false, false]" ));
95+ // No Inf
96+ CheckScalarUnary (" is_finite" ,
97+ ArrayFromJSON (float32 (), " [0.0, 1.0, 2.0, 3.0, NaN, null]" ),
98+ ArrayFromJSON (boolean (), " [true, true, true, true, false, null]" ));
99+ // Some Inf
100+ CheckScalarUnary (" is_finite" ,
101+ ArrayFromJSON (float32 (), " [0.0, Inf, 2.0, -Inf, NaN, null]" ),
102+ ArrayFromJSON (boolean (), " [true, false, true, false, false, null]" ));
103+ }
104+
105+ TEST_F (TestDoubleValidityKernels, DoubleArrayIsFinite) {
106+ // All Inf
107+ CheckScalarUnary (" is_finite" , ArrayFromJSON (float64 (), " [Inf, -Inf, Inf, -Inf, Inf]" ),
108+ ArrayFromJSON (boolean (), " [false, false, false, false, false]" ));
109+ // No Inf
110+ CheckScalarUnary (" is_finite" ,
111+ ArrayFromJSON (float64 (), " [0.0, 1.0, 2.0, 3.0, NaN, null]" ),
112+ ArrayFromJSON (boolean (), " [true, true, true, true, false, null]" ));
113+ // Some Inf
114+ CheckScalarUnary (" is_finite" ,
115+ ArrayFromJSON (float64 (), " [0.0, Inf, 2.0, -Inf, NaN, null]" ),
116+ ArrayFromJSON (boolean (), " [true, false, true, false, false, null]" ));
117+ }
118+
119+ TEST_F (TestFloatValidityKernels, FloatScalarIsFinite) {
120+ CheckScalarUnary (" is_finite" , MakeNullScalar (float32 ()), MakeNullScalar (boolean ()));
121+ CheckScalarUnary (" is_finite" , MakeScalar (42 .0f ), MakeScalar (true ));
122+ CheckScalarUnary (" is_finite" , MakeScalar (std::nanf (" " )), MakeScalar (false ));
123+ CheckScalarUnary (" is_finite" , MakeScalar (std::numeric_limits<float >::infinity ()),
124+ MakeScalar (false ));
125+ CheckScalarUnary (" is_finite" , MakeScalar (-std::numeric_limits<float >::infinity ()),
126+ MakeScalar (false ));
127+ }
128+
129+ TEST_F (TestDoubleValidityKernels, DoubleScalarIsFinite) {
130+ CheckScalarUnary (" is_finite" , MakeNullScalar (float64 ()), MakeNullScalar (boolean ()));
131+ CheckScalarUnary (" is_finite" , MakeScalar (42.0 ), MakeScalar (true ));
132+ CheckScalarUnary (" is_finite" , MakeScalar (std::nan (" " )), MakeScalar (false ));
133+ CheckScalarUnary (" is_finite" , MakeScalar (std::numeric_limits<double >::infinity ()),
134+ MakeScalar (false ));
135+ CheckScalarUnary (" is_finite" , MakeScalar (-std::numeric_limits<double >::infinity ()),
136+ MakeScalar (false ));
137+ }
138+
139+ TEST_F (TestFloatValidityKernels, FloatArrayIsInf) {
140+ // All Inf
141+ CheckScalarUnary (" is_inf" , ArrayFromJSON (float32 (), " [Inf, -Inf, Inf, -Inf, Inf]" ),
142+ ArrayFromJSON (boolean (), " [true, true, true, true, true]" ));
143+ // No Inf
144+ CheckScalarUnary (" is_inf" , ArrayFromJSON (float32 (), " [0.0, 1.0, 2.0, 3.0, NaN, null]" ),
145+ ArrayFromJSON (boolean (), " [false, false, false, false, false, null]" ));
146+ // Some Infs
147+ CheckScalarUnary (" is_inf" , ArrayFromJSON (float32 (), " [0.0, Inf, 2.0, -Inf, NaN, null]" ),
148+ ArrayFromJSON (boolean (), " [false, true, false, true, false, null]" ));
149+ }
150+
151+ TEST_F (TestDoubleValidityKernels, DoubleArrayIsInf) {
152+ // All Inf
153+ CheckScalarUnary (" is_inf" , ArrayFromJSON (float64 (), " [Inf, -Inf, Inf, -Inf, Inf]" ),
154+ ArrayFromJSON (boolean (), " [true, true, true, true, true]" ));
155+ // No Inf
156+ CheckScalarUnary (" is_inf" , ArrayFromJSON (float64 (), " [0.0, 1.0, 2.0, 3.0, NaN, null]" ),
157+ ArrayFromJSON (boolean (), " [false, false, false, false, false, null]" ));
158+ // Some Infs
159+ CheckScalarUnary (" is_inf" , ArrayFromJSON (float64 (), " [0.0, Inf, 2.0, -Inf, NaN, null]" ),
160+ ArrayFromJSON (boolean (), " [false, true, false, true, false, null]" ));
161+ }
162+
163+ TEST_F (TestFloatValidityKernels, FloatScalarIsInf) {
164+ CheckScalarUnary (" is_inf" , MakeNullScalar (float32 ()), MakeNullScalar (boolean ()));
165+ CheckScalarUnary (" is_inf" , MakeScalar (42 .0f ), MakeScalar (false ));
166+ CheckScalarUnary (" is_inf" , MakeScalar (std::nanf (" " )), MakeScalar (false ));
167+ CheckScalarUnary (" is_inf" , MakeScalar (std::numeric_limits<float >::infinity ()),
168+ MakeScalar (true ));
169+ CheckScalarUnary (" is_inf" , MakeScalar (-std::numeric_limits<float >::infinity ()),
170+ MakeScalar (true ));
171+ }
172+
173+ TEST_F (TestDoubleValidityKernels, DoubleScalarIsInf) {
174+ CheckScalarUnary (" is_inf" , MakeNullScalar (float64 ()), MakeNullScalar (boolean ()));
175+ CheckScalarUnary (" is_inf" , MakeScalar (42.0 ), MakeScalar (false ));
176+ CheckScalarUnary (" is_inf" , MakeScalar (std::nan (" " )), MakeScalar (false ));
177+ CheckScalarUnary (" is_inf" , MakeScalar (std::numeric_limits<double >::infinity ()),
178+ MakeScalar (true ));
179+ CheckScalarUnary (" is_inf" , MakeScalar (-std::numeric_limits<double >::infinity ()),
180+ MakeScalar (true ));
181+ }
182+
91183TEST_F (TestFloatValidityKernels, FloatArrayIsNan) {
92184 // All NaN
93185 CheckScalarUnary (" is_nan" , ArrayFromJSON (float32 (), " [NaN, NaN, NaN, NaN, NaN]" ),
94186 ArrayFromJSON (boolean (), " [true, true, true, true, true]" ));
95187 // No NaN
96- CheckScalarUnary (" is_nan" , ArrayFromJSON (float32 (), " [0.0, 1.0, 2.0, 3.0, 4.0 , null]" ),
188+ CheckScalarUnary (" is_nan" , ArrayFromJSON (float32 (), " [0.0, 1.0, 2.0, 3.0, Inf , null]" ),
97189 ArrayFromJSON (boolean (), " [false, false, false, false, false, null]" ));
98190 // Some NaNs
99- CheckScalarUnary (" is_nan" , ArrayFromJSON (float32 (), " [0.0, NaN, 2.0, NaN, 4.0 , null]" ),
191+ CheckScalarUnary (" is_nan" , ArrayFromJSON (float32 (), " [0.0, NaN, 2.0, NaN, Inf , null]" ),
100192 ArrayFromJSON (boolean (), " [false, true, false, true, false, null]" ));
101193}
102194
@@ -105,23 +197,31 @@ TEST_F(TestDoubleValidityKernels, DoubleArrayIsNan) {
105197 CheckScalarUnary (" is_nan" , ArrayFromJSON (float64 (), " [NaN, NaN, NaN, NaN, NaN]" ),
106198 ArrayFromJSON (boolean (), " [true, true, true, true, true]" ));
107199 // No NaN
108- CheckScalarUnary (" is_nan" , ArrayFromJSON (float64 (), " [0.0, 1.0, 2.0, 3.0, 4.0 , null]" ),
200+ CheckScalarUnary (" is_nan" , ArrayFromJSON (float64 (), " [0.0, 1.0, 2.0, 3.0, Inf , null]" ),
109201 ArrayFromJSON (boolean (), " [false, false, false, false, false, null]" ));
110202 // Some NaNs
111- CheckScalarUnary (" is_nan" , ArrayFromJSON (float64 (), " [0.0, NaN, 2.0, NaN, 4.0 , null]" ),
203+ CheckScalarUnary (" is_nan" , ArrayFromJSON (float64 (), " [0.0, NaN, 2.0, NaN, Inf , null]" ),
112204 ArrayFromJSON (boolean (), " [false, true, false, true, false, null]" ));
113205}
114206
115207TEST_F (TestFloatValidityKernels, FloatScalarIsNan) {
116208 CheckScalarUnary (" is_nan" , MakeNullScalar (float32 ()), MakeNullScalar (boolean ()));
117209 CheckScalarUnary (" is_nan" , MakeScalar (42 .0f ), MakeScalar (false ));
118210 CheckScalarUnary (" is_nan" , MakeScalar (std::nanf (" " )), MakeScalar (true ));
211+ CheckScalarUnary (" is_nan" , MakeScalar (std::numeric_limits<float >::infinity ()),
212+ MakeScalar (false ));
213+ CheckScalarUnary (" is_nan" , MakeScalar (-std::numeric_limits<float >::infinity ()),
214+ MakeScalar (false ));
119215}
120216
121217TEST_F (TestDoubleValidityKernels, DoubleScalarIsNan) {
122218 CheckScalarUnary (" is_nan" , MakeNullScalar (float64 ()), MakeNullScalar (boolean ()));
123219 CheckScalarUnary (" is_nan" , MakeScalar (42.0 ), MakeScalar (false ));
124220 CheckScalarUnary (" is_nan" , MakeScalar (std::nan (" " )), MakeScalar (true ));
221+ CheckScalarUnary (" is_nan" , MakeScalar (std::numeric_limits<double >::infinity ()),
222+ MakeScalar (false ));
223+ CheckScalarUnary (" is_nan" , MakeScalar (-std::numeric_limits<double >::infinity ()),
224+ MakeScalar (false ));
125225}
126226
127227} // namespace compute
0 commit comments