| 2381 | |
| 2382 | template <typename TYPE> |
| 2383 | void CheckFloatingZeroEquality() { |
| 2384 | using V = NumericArgType<TYPE>; |
| 2385 | std::shared_ptr<Array> a, b; |
| 2386 | std::shared_ptr<DataType> type = TypeTraits<TYPE>::type_singleton(); |
| 2387 | |
| 2388 | ArrayFromVector<TYPE, V>(type, {true, false}, {V(0.0), V(1.0)}, &a); |
| 2389 | ArrayFromVector<TYPE, V>(type, {true, false}, {V(0.0), V(1.0)}, &b); |
| 2390 | ASSERT_TRUE(a->Equals(b)); |
| 2391 | ASSERT_TRUE(b->Equals(a)); |
| 2392 | for (auto nans_equal : {false, true}) { |
| 2393 | for (auto signed_zeros_equal : {false, true}) { |
| 2394 | auto opts = |
| 2395 | EqualOptions().nans_equal(nans_equal).signed_zeros_equal(signed_zeros_equal); |
| 2396 | ASSERT_TRUE(a->Equals(b, opts)); |
| 2397 | ASSERT_TRUE(b->Equals(a, opts)); |
| 2398 | ASSERT_TRUE(a->RangeEquals(b, 0, 2, 0, opts)); |
| 2399 | ASSERT_TRUE(b->RangeEquals(a, 0, 2, 0, opts)); |
| 2400 | ASSERT_TRUE(a->RangeEquals(b, 1, 2, 1, opts)); |
| 2401 | ASSERT_TRUE(b->RangeEquals(a, 1, 2, 1, opts)); |
| 2402 | } |
| 2403 | } |
| 2404 | |
| 2405 | ArrayFromVector<TYPE, V>(type, {true, false}, {V(0.0), V(1.0)}, &a); |
| 2406 | ArrayFromVector<TYPE, V>(type, {true, false}, {V(-0.0), V(1.0)}, &b); |
| 2407 | for (auto nans_equal : {false, true}) { |
| 2408 | auto opts = EqualOptions().nans_equal(nans_equal); |
| 2409 | ASSERT_TRUE(a->Equals(b, opts)); |
| 2410 | ASSERT_TRUE(b->Equals(a, opts)); |
| 2411 | ASSERT_FALSE(a->Equals(b, opts.signed_zeros_equal(false))); |
| 2412 | ASSERT_FALSE(b->Equals(a, opts.signed_zeros_equal(false))); |
| 2413 | ASSERT_TRUE(a->RangeEquals(b, 0, 2, 0)); |
| 2414 | ASSERT_TRUE(b->RangeEquals(a, 0, 2, 0)); |
| 2415 | ASSERT_FALSE(a->RangeEquals(b, 0, 2, 0, opts.signed_zeros_equal(false))); |
| 2416 | ASSERT_FALSE(b->RangeEquals(a, 0, 2, 0, opts.signed_zeros_equal(false))); |
| 2417 | ASSERT_TRUE(a->RangeEquals(b, 1, 2, 1)); |
| 2418 | ASSERT_TRUE(b->RangeEquals(a, 1, 2, 1)); |
| 2419 | ASSERT_TRUE(a->RangeEquals(b, 1, 2, 1, opts.signed_zeros_equal(false))); |
| 2420 | ASSERT_TRUE(b->RangeEquals(a, 1, 2, 1, opts.signed_zeros_equal(false))); |
| 2421 | } |
| 2422 | } |
| 2423 | |
| 2424 | template <typename TYPE> |
| 2425 | void CheckFloatApproxEqualsWithUlpDistance() { |
nothing calls this directly
no test coverage detected