@@ -2122,14 +2122,16 @@ void CheckSliceApproxEquals() {
21222122
21232123template <typename TYPE>
21242124void CheckFloatingNanEquality () {
2125+ using V =
2126+ std::conditional_t <is_half_float_type<TYPE>::value, Float16, typename TYPE::c_type>;
21252127 std::shared_ptr<Array> a, b;
21262128 std::shared_ptr<DataType> type = TypeTraits<TYPE>::type_singleton ();
21272129
2128- const auto nan_value = RealToCType<TYPE>(NAN );
2130+ const auto nan_value = std::numeric_limits<V>:: quiet_NaN ( );
21292131
21302132 // NaN in a null entry
2131- ArrayFromVector<TYPE>(type, {true , false }, {RealToCType<TYPE> (0.5 ), nan_value}, &a);
2132- ArrayFromVector<TYPE>(type, {true , false }, {RealToCType<TYPE> (0.5 ), nan_value}, &b);
2133+ ArrayFromVector<TYPE, V >(type, {true , false }, {V (0.5 ), nan_value}, &a);
2134+ ArrayFromVector<TYPE, V >(type, {true , false }, {V (0.5 ), nan_value}, &b);
21332135 ASSERT_TRUE (a->Equals (b));
21342136 ASSERT_TRUE (b->Equals (a));
21352137 ASSERT_TRUE (a->ApproxEquals (b));
@@ -2140,8 +2142,8 @@ void CheckFloatingNanEquality() {
21402142 ASSERT_TRUE (b->RangeEquals (a, 1 , 2 , 1 ));
21412143
21422144 // NaN in a valid entry
2143- ArrayFromVector<TYPE>(type, {false , true }, {RealToCType<TYPE> (0.5 ), nan_value}, &a);
2144- ArrayFromVector<TYPE>(type, {false , true }, {RealToCType<TYPE> (0.5 ), nan_value}, &b);
2145+ ArrayFromVector<TYPE, V >(type, {false , true }, {V (0.5 ), nan_value}, &a);
2146+ ArrayFromVector<TYPE, V >(type, {false , true }, {V (0.5 ), nan_value}, &b);
21452147 ASSERT_FALSE (a->Equals (b));
21462148 ASSERT_FALSE (b->Equals (a));
21472149 ASSERT_TRUE (a->Equals (b, EqualOptions ().nans_equal (true )));
@@ -2160,9 +2162,8 @@ void CheckFloatingNanEquality() {
21602162 ASSERT_TRUE (b->RangeEquals (a, 0 , 1 , 0 ));
21612163
21622164 // NaN != non-NaN
2163- ArrayFromVector<TYPE>(type, {false , true }, {RealToCType<TYPE>(0.5 ), nan_value}, &a);
2164- ArrayFromVector<TYPE>(type, {false , true },
2165- {RealToCType<TYPE>(0.5 ), RealToCType<TYPE>(0.0 )}, &b);
2165+ ArrayFromVector<TYPE, V>(type, {false , true }, {V (0.5 ), nan_value}, &a);
2166+ ArrayFromVector<TYPE, V>(type, {false , true }, {V (0.5 ), V (0.0 )}, &b);
21662167 ASSERT_FALSE (a->Equals (b));
21672168 ASSERT_FALSE (b->Equals (a));
21682169 ASSERT_FALSE (a->Equals (b, EqualOptions ().nans_equal (true )));
@@ -2183,17 +2184,17 @@ void CheckFloatingNanEquality() {
21832184
21842185template <typename TYPE>
21852186void CheckFloatingInfinityEquality () {
2187+ using V =
2188+ std::conditional_t <is_half_float_type<TYPE>::value, Float16, typename TYPE::c_type>;
21862189 std::shared_ptr<Array> a, b;
21872190 std::shared_ptr<DataType> type = TypeTraits<TYPE>::type_singleton ();
21882191
2189- const auto infinity = RealToCType<TYPE>( std::numeric_limits<double >::infinity () );
2192+ const auto infinity = std::numeric_limits<V >::infinity ();
21902193
21912194 for (auto nans_equal : {false , true }) {
21922195 // Infinity in a null entry
2193- ArrayFromVector<TYPE>(type, {true , false },
2194- {RealToCType<TYPE>(0.5 ), RealToCType<TYPE>(infinity)}, &a);
2195- ArrayFromVector<TYPE>(type, {true , false },
2196- {RealToCType<TYPE>(0.5 ), RealToCType<TYPE>(-infinity)}, &b);
2196+ ArrayFromVector<TYPE, V>(type, {true , false }, {V (0.5 ), infinity}, &a);
2197+ ArrayFromVector<TYPE, V>(type, {true , false }, {V (0.5 ), -infinity}, &b);
21972198 ASSERT_TRUE (a->Equals (b));
21982199 ASSERT_TRUE (b->Equals (a));
21992200 ASSERT_TRUE (a->ApproxEquals (b, EqualOptions ().atol (1e-5 ).nans_equal (nans_equal)));
@@ -2204,10 +2205,8 @@ void CheckFloatingInfinityEquality() {
22042205 ASSERT_TRUE (b->RangeEquals (a, 1 , 2 , 1 ));
22052206
22062207 // Infinity in a valid entry
2207- ArrayFromVector<TYPE>(type, {false , true },
2208- {RealToCType<TYPE>(0.5 ), RealToCType<TYPE>(infinity)}, &a);
2209- ArrayFromVector<TYPE>(type, {false , true },
2210- {RealToCType<TYPE>(0.5 ), RealToCType<TYPE>(infinity)}, &b);
2208+ ArrayFromVector<TYPE, V>(type, {false , true }, {V (0.5 ), infinity}, &a);
2209+ ArrayFromVector<TYPE, V>(type, {false , true }, {V (0.5 ), infinity}, &b);
22112210 ASSERT_TRUE (a->Equals (b));
22122211 ASSERT_TRUE (b->Equals (a));
22132212 ASSERT_TRUE (a->ApproxEquals (b, EqualOptions ().atol (1e-5 ).nans_equal (nans_equal)));
@@ -2224,21 +2223,17 @@ void CheckFloatingInfinityEquality() {
22242223 ASSERT_TRUE (b->RangeEquals (a, 0 , 1 , 0 ));
22252224
22262225 // Infinity != non-infinity
2227- ArrayFromVector<TYPE>(type, {false , true },
2228- {RealToCType<TYPE>(0.5 ), RealToCType<TYPE>(-infinity)}, &a);
2229- ArrayFromVector<TYPE>(type, {false , true },
2230- {RealToCType<TYPE>(0.5 ), RealToCType<TYPE>(0.0 )}, &b);
2226+ ArrayFromVector<TYPE, V>(type, {false , true }, {V (0.5 ), -infinity}, &a);
2227+ ArrayFromVector<TYPE, V>(type, {false , true }, {V (0.5 ), V (0.0 )}, &b);
22312228 ASSERT_FALSE (a->Equals (b));
22322229 ASSERT_FALSE (b->Equals (a));
22332230 ASSERT_FALSE (a->ApproxEquals (b, EqualOptions ().atol (1e-5 ).nans_equal (nans_equal)));
22342231 ASSERT_FALSE (b->ApproxEquals (a));
22352232 ASSERT_FALSE (a->ApproxEquals (b, EqualOptions ().atol (1e-5 ).nans_equal (nans_equal)));
22362233 ASSERT_FALSE (b->ApproxEquals (a, EqualOptions ().atol (1e-5 ).nans_equal (nans_equal)));
22372234 // Infinity != Negative infinity
2238- ArrayFromVector<TYPE>(type, {true , true },
2239- {RealToCType<TYPE>(0.5 ), RealToCType<TYPE>(-infinity)}, &a);
2240- ArrayFromVector<TYPE>(type, {true , true },
2241- {RealToCType<TYPE>(0.5 ), RealToCType<TYPE>(infinity)}, &b);
2235+ ArrayFromVector<TYPE, V>(type, {true , true }, {V (0.5 ), -infinity}, &a);
2236+ ArrayFromVector<TYPE, V>(type, {true , true }, {V (0.5 ), infinity}, &b);
22422237 ASSERT_FALSE (a->Equals (b));
22432238 ASSERT_FALSE (b->Equals (a));
22442239 ASSERT_FALSE (a->ApproxEquals (b));
@@ -2258,13 +2253,13 @@ void CheckFloatingInfinityEquality() {
22582253
22592254template <typename TYPE>
22602255void CheckFloatingZeroEquality () {
2256+ using V =
2257+ std::conditional_t <is_half_float_type<TYPE>::value, Float16, typename TYPE::c_type>;
22612258 std::shared_ptr<Array> a, b;
22622259 std::shared_ptr<DataType> type = TypeTraits<TYPE>::type_singleton ();
22632260
2264- ArrayFromVector<TYPE>(type, {true , false },
2265- {RealToCType<TYPE>(0.0 ), RealToCType<TYPE>(1.0 )}, &a);
2266- ArrayFromVector<TYPE>(type, {true , false },
2267- {RealToCType<TYPE>(0.0 ), RealToCType<TYPE>(1.0 )}, &b);
2261+ ArrayFromVector<TYPE, V>(type, {true , false }, {V (0.0 ), V (1.0 )}, &a);
2262+ ArrayFromVector<TYPE, V>(type, {true , false }, {V (0.0 ), V (1.0 )}, &b);
22682263 ASSERT_TRUE (a->Equals (b));
22692264 ASSERT_TRUE (b->Equals (a));
22702265 for (auto nans_equal : {false , true }) {
@@ -2280,10 +2275,8 @@ void CheckFloatingZeroEquality() {
22802275 }
22812276 }
22822277
2283- ArrayFromVector<TYPE>(type, {true , false },
2284- {RealToCType<TYPE>(0.0 ), RealToCType<TYPE>(1.0 )}, &a);
2285- ArrayFromVector<TYPE>(type, {true , false },
2286- {RealToCType<TYPE>(-0.0 ), RealToCType<TYPE>(1.0 )}, &b);
2278+ ArrayFromVector<TYPE, V>(type, {true , false }, {V (0.0 ), V (1.0 )}, &a);
2279+ ArrayFromVector<TYPE, V>(type, {true , false }, {V (-0.0 ), V (1.0 )}, &b);
22872280 for (auto nans_equal : {false , true }) {
22882281 auto opts = EqualOptions ().nans_equal (nans_equal);
22892282 ASSERT_TRUE (a->Equals (b, opts));
0 commit comments