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

Function CheckFloatingInfinityEquality

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

Source from the content-addressed store, hash-verified

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