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