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

Function CheckApproxEquals

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

Source from the content-addressed store, hash-verified

2123
2124template <typename TYPE>
2125void CheckApproxEquals() {
2126 std::shared_ptr<Array> a, b;
2127 std::shared_ptr<DataType> type = TypeTraits<TYPE>::type_singleton();
2128
2129 ArrayFromVector<TYPE>(type, {true, false}, {0.5, 1.0}, &a);
2130 ArrayFromVector<TYPE>(type, {true, false}, {0.5000001f, 2.0}, &b);
2131 ASSERT_TRUE(a->ApproxEquals(b));
2132 ASSERT_TRUE(b->ApproxEquals(a));
2133 for (bool nans_equal : {false, true}) {
2134 for (bool signed_zeros_equal : {false, true}) {
2135 auto opts =
2136 EqualOptions().nans_equal(nans_equal).signed_zeros_equal(signed_zeros_equal);
2137 ASSERT_TRUE(a->ApproxEquals(b, opts));
2138 ASSERT_TRUE(b->ApproxEquals(a, opts));
2139 }
2140 }
2141
2142 // Default tolerance too small
2143 ArrayFromVector<TYPE>(type, {true, false}, {0.5001f, 2.0}, &b);
2144 ASSERT_FALSE(a->ApproxEquals(b));
2145 ASSERT_FALSE(b->ApproxEquals(a));
2146 ASSERT_TRUE(a->ApproxEquals(b, EqualOptions().atol(1e-3)));
2147 ASSERT_TRUE(b->ApproxEquals(a, EqualOptions().atol(1e-3)));
2148 for (bool nans_equal : {false, true}) {
2149 for (bool signed_zeros_equal : {false, true}) {
2150 auto opts =
2151 EqualOptions().nans_equal(nans_equal).signed_zeros_equal(signed_zeros_equal);
2152 ASSERT_FALSE(a->ApproxEquals(b, opts));
2153 ASSERT_FALSE(b->ApproxEquals(a, opts));
2154 ASSERT_TRUE(a->ApproxEquals(b, opts.atol(1e-3)));
2155 ASSERT_TRUE(b->ApproxEquals(a, opts.atol(1e-3)));
2156 }
2157 }
2158
2159 // Values on other sides of 0
2160 ArrayFromVector<TYPE>(type, {true, false}, {-0.0001f, 1.0}, &a);
2161 ArrayFromVector<TYPE>(type, {true, false}, {0.0001f, 2.0}, &b);
2162 ASSERT_FALSE(a->ApproxEquals(b));
2163 ASSERT_FALSE(b->ApproxEquals(a));
2164 ASSERT_TRUE(a->ApproxEquals(b, EqualOptions().atol(1e-3)));
2165 ASSERT_TRUE(b->ApproxEquals(a, EqualOptions().atol(1e-3)));
2166 for (bool nans_equal : {false, true}) {
2167 for (bool signed_zeros_equal : {false, true}) {
2168 auto opts =
2169 EqualOptions().nans_equal(nans_equal).signed_zeros_equal(signed_zeros_equal);
2170 ASSERT_FALSE(a->ApproxEquals(b, opts));
2171 ASSERT_FALSE(b->ApproxEquals(a, opts));
2172 ASSERT_TRUE(a->ApproxEquals(b, opts.atol(1e-3)));
2173 ASSERT_TRUE(b->ApproxEquals(a, opts.atol(1e-3)));
2174 }
2175 }
2176
2177 // Mismatching validity
2178 ArrayFromVector<TYPE>(type, {true, false}, {0.5, 1.0}, &a);
2179 ArrayFromVector<TYPE>(type, {false, false}, {0.5, 1.0}, &b);
2180 ASSERT_FALSE(a->ApproxEquals(b));
2181 ASSERT_FALSE(b->ApproxEquals(a));
2182 ASSERT_FALSE(a->ApproxEquals(b, EqualOptions().nans_equal(true)));

Callers

nothing calls this directly

Calls 6

signed_zeros_equalMethod · 0.80
nans_equalMethod · 0.80
atolMethod · 0.80
type_singletonFunction · 0.50
EqualOptionsClass · 0.50
ApproxEqualsMethod · 0.45

Tested by

no test coverage detected