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

Function CheckNotWithinUlp

cpp/src/arrow/testing/gtest_util_test.cc:220–245  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

218
219template <typename Float>
220void CheckNotWithinUlp(Float x, Float y, int n_ulp) {
221 CheckNotWithinUlpSingle(x, y, n_ulp);
222 CheckNotWithinUlpSingle(y, x, n_ulp);
223 CheckNotWithinUlpSingle(-x, -y, n_ulp);
224 CheckNotWithinUlpSingle(-y, -x, n_ulp);
225 if (n_ulp > 1) {
226 CheckNotWithinUlpSingle(x, y, n_ulp - 1);
227 CheckNotWithinUlpSingle(y, x, n_ulp - 1);
228 CheckNotWithinUlpSingle(-x, -y, n_ulp - 1);
229 CheckNotWithinUlpSingle(-y, -x, n_ulp - 1);
230 }
231
232 for (int exp : {1, -1, 10, -10}) {
233 Float x_scaled(0);
234 Float y_scaled(0);
235 if constexpr (std::is_same_v<Float, Float16>) {
236 x_scaled = Float16(std::ldexp(x.ToFloat(), exp));
237 y_scaled = Float16(std::ldexp(y.ToFloat(), exp));
238 } else {
239 x_scaled = std::ldexp(x, exp);
240 y_scaled = std::ldexp(y, exp);
241 }
242 CheckNotWithinUlpSingle(x_scaled, y_scaled, n_ulp);
243 CheckNotWithinUlpSingle(y_scaled, x_scaled, n_ulp);
244 }
245}
246
247TEST(TestWithinUlp, Double) {
248 for (double f : {0.0, 1e-20, 1.0, 2345678.9}) {

Callers 1

TESTFunction · 0.85

Calls 3

CheckNotWithinUlpSingleFunction · 0.85
Float16Function · 0.50
ToFloatMethod · 0.45

Tested by

no test coverage detected