MCPcopy Create free account
hub / github.com/apache/arrow / CheckFloatingNanEquality

Function CheckFloatingNanEquality

cpp/src/arrow/array/array_test.cc:2254–2312  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2252
2253template <typename TYPE>
2254void CheckFloatingNanEquality() {
2255 using V = NumericArgType<TYPE>;
2256 std::shared_ptr<Array> a, b;
2257 std::shared_ptr<DataType> type = TypeTraits<TYPE>::type_singleton();
2258
2259 const auto nan_value = std::numeric_limits<V>::quiet_NaN();
2260
2261 // NaN in a null entry
2262 ArrayFromVector<TYPE, V>(type, {true, false}, {V(0.5), nan_value}, &a);
2263 ArrayFromVector<TYPE, V>(type, {true, false}, {V(0.5), nan_value}, &b);
2264 ASSERT_TRUE(a->Equals(b));
2265 ASSERT_TRUE(b->Equals(a));
2266 ASSERT_TRUE(a->ApproxEquals(b));
2267 ASSERT_TRUE(b->ApproxEquals(a));
2268 ASSERT_TRUE(a->RangeEquals(b, 0, 2, 0));
2269 ASSERT_TRUE(b->RangeEquals(a, 0, 2, 0));
2270 ASSERT_TRUE(a->RangeEquals(b, 1, 2, 1));
2271 ASSERT_TRUE(b->RangeEquals(a, 1, 2, 1));
2272
2273 // NaN in a valid entry
2274 ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), nan_value}, &a);
2275 ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), nan_value}, &b);
2276 ASSERT_FALSE(a->Equals(b));
2277 ASSERT_FALSE(b->Equals(a));
2278 ASSERT_TRUE(a->Equals(b, EqualOptions().nans_equal(true)));
2279 ASSERT_TRUE(b->Equals(a, EqualOptions().nans_equal(true)));
2280 ASSERT_FALSE(a->ApproxEquals(b));
2281 ASSERT_FALSE(b->ApproxEquals(a));
2282 ASSERT_TRUE(a->ApproxEquals(b, EqualOptions().atol(1e-5).nans_equal(true)));
2283 ASSERT_TRUE(b->ApproxEquals(a, EqualOptions().atol(1e-5).nans_equal(true)));
2284 // NaN in tested range
2285 ASSERT_FALSE(a->RangeEquals(b, 0, 2, 0));
2286 ASSERT_FALSE(b->RangeEquals(a, 0, 2, 0));
2287 ASSERT_FALSE(a->RangeEquals(b, 1, 2, 1));
2288 ASSERT_FALSE(b->RangeEquals(a, 1, 2, 1));
2289 // NaN not in tested range
2290 ASSERT_TRUE(a->RangeEquals(b, 0, 1, 0));
2291 ASSERT_TRUE(b->RangeEquals(a, 0, 1, 0));
2292
2293 // NaN != non-NaN
2294 ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), nan_value}, &a);
2295 ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), V(0.0)}, &b);
2296 ASSERT_FALSE(a->Equals(b));
2297 ASSERT_FALSE(b->Equals(a));
2298 ASSERT_FALSE(a->Equals(b, EqualOptions().nans_equal(true)));
2299 ASSERT_FALSE(b->Equals(a, EqualOptions().nans_equal(true)));
2300 ASSERT_FALSE(a->ApproxEquals(b));
2301 ASSERT_FALSE(b->ApproxEquals(a));
2302 ASSERT_FALSE(a->ApproxEquals(b, EqualOptions().atol(1e-5).nans_equal(true)));
2303 ASSERT_FALSE(b->ApproxEquals(a, EqualOptions().atol(1e-5).nans_equal(true)));
2304 // NaN in tested range
2305 ASSERT_FALSE(a->RangeEquals(b, 0, 2, 0));
2306 ASSERT_FALSE(b->RangeEquals(a, 0, 2, 0));
2307 ASSERT_FALSE(a->RangeEquals(b, 1, 2, 1));
2308 ASSERT_FALSE(b->RangeEquals(a, 1, 2, 1));
2309 // NaN not in tested range
2310 ASSERT_TRUE(a->RangeEquals(b, 0, 1, 0));
2311 ASSERT_TRUE(b->RangeEquals(a, 0, 1, 0));

Callers

nothing calls this directly

Calls 5

EqualOptionsClass · 0.85
RangeEqualsMethod · 0.80
type_singletonFunction · 0.50
EqualsMethod · 0.45
ApproxEqualsMethod · 0.45

Tested by

no test coverage detected