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

Function CheckFloatingInfinityEquality

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

Source from the content-addressed store, hash-verified

2305
2306template <typename TYPE>
2307void CheckFloatingInfinityEquality() {
2308 using V = NumericArgType<TYPE>;
2309 std::shared_ptr<Array> a, b;
2310 std::shared_ptr<DataType> type = TypeTraits<TYPE>::type_singleton();
2311
2312 const auto infinity = std::numeric_limits<V>::infinity();
2313
2314 for (auto nans_equal : {false, true}) {
2315 // Infinity in a null entry
2316 ArrayFromVector<TYPE, V>(type, {true, false}, {V(0.5), infinity}, &a);
2317 ArrayFromVector<TYPE, V>(type, {true, false}, {V(0.5), -infinity}, &b);
2318 ASSERT_TRUE(a->Equals(b));
2319 ASSERT_TRUE(b->Equals(a));
2320 ASSERT_TRUE(a->ApproxEquals(b, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
2321 ASSERT_TRUE(b->ApproxEquals(a, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
2322 ASSERT_TRUE(a->RangeEquals(b, 0, 2, 0));
2323 ASSERT_TRUE(b->RangeEquals(a, 0, 2, 0));
2324 ASSERT_TRUE(a->RangeEquals(b, 1, 2, 1));
2325 ASSERT_TRUE(b->RangeEquals(a, 1, 2, 1));
2326
2327 // Infinity in a valid entry
2328 ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), infinity}, &a);
2329 ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), infinity}, &b);
2330 ASSERT_TRUE(a->Equals(b));
2331 ASSERT_TRUE(b->Equals(a));
2332 ASSERT_TRUE(a->ApproxEquals(b, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
2333 ASSERT_TRUE(b->ApproxEquals(a, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
2334 ASSERT_TRUE(a->ApproxEquals(b, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
2335 ASSERT_TRUE(b->ApproxEquals(a, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
2336 // Infinity in tested range
2337 ASSERT_TRUE(a->RangeEquals(b, 0, 2, 0));
2338 ASSERT_TRUE(b->RangeEquals(a, 0, 2, 0));
2339 ASSERT_TRUE(a->RangeEquals(b, 1, 2, 1));
2340 ASSERT_TRUE(b->RangeEquals(a, 1, 2, 1));
2341 // Infinity not in tested range
2342 ASSERT_TRUE(a->RangeEquals(b, 0, 1, 0));
2343 ASSERT_TRUE(b->RangeEquals(a, 0, 1, 0));
2344
2345 // Infinity != non-infinity
2346 ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), -infinity}, &a);
2347 ArrayFromVector<TYPE, V>(type, {false, true}, {V(0.5), V(0.0)}, &b);
2348 ASSERT_FALSE(a->Equals(b));
2349 ASSERT_FALSE(b->Equals(a));
2350 ASSERT_FALSE(a->ApproxEquals(b, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
2351 ASSERT_FALSE(b->ApproxEquals(a));
2352 ASSERT_FALSE(a->ApproxEquals(b, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
2353 ASSERT_FALSE(b->ApproxEquals(a, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
2354 // Infinity != Negative infinity
2355 ArrayFromVector<TYPE, V>(type, {true, true}, {V(0.5), -infinity}, &a);
2356 ArrayFromVector<TYPE, V>(type, {true, true}, {V(0.5), infinity}, &b);
2357 ASSERT_FALSE(a->Equals(b));
2358 ASSERT_FALSE(b->Equals(a));
2359 ASSERT_FALSE(a->ApproxEquals(b));
2360 ASSERT_FALSE(b->ApproxEquals(a));
2361 ASSERT_FALSE(a->ApproxEquals(b, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
2362 ASSERT_FALSE(b->ApproxEquals(a, EqualOptions().atol(1e-5).nans_equal(nans_equal)));
2363 // Infinity in tested range
2364 ASSERT_FALSE(a->RangeEquals(b, 0, 2, 0));

Callers

nothing calls this directly

Calls 7

nans_equalMethod · 0.80
atolMethod · 0.80
RangeEqualsMethod · 0.80
type_singletonFunction · 0.50
EqualOptionsClass · 0.50
EqualsMethod · 0.45
ApproxEqualsMethod · 0.45

Tested by

no test coverage detected