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

Function CheckFloatingNanEquality

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

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 7

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

Tested by

no test coverage detected