Inexact check for ParallelAssign test
Change-Id: I3880f51868c55bce2901e7414cf5109385cccee7
diff --git a/internal/ceres/parallel_for_test.cc b/internal/ceres/parallel_for_test.cc
index 6c342aa..871bb52 100644
--- a/internal/ceres/parallel_for_test.cc
+++ b/internal/ceres/parallel_for_test.cc
@@ -436,6 +436,7 @@
TEST(ParallelAssign, D2MulX) {
const int kVectorSize = 1024 * 1024;
const int kMaxNumThreads = 8;
+ const double kEpsilon = 1e-16;
const Vector D_full = Vector::Random(kVectorSize * 2);
const ConstVectorRef D(D_full.data() + kVectorSize, kVectorSize);
@@ -449,8 +450,12 @@
ParallelAssign(
&context, num_threads, y_observed, D.array().square() * x.array());
- // Bit-exact result is expected
- CHECK_EQ((y_expected - y_observed).squaredNorm(), 0.);
+ // We might get non-bit-exact result due to different precision in scalar
+ // and vector code. For example, in x86 mode mingw might emit x87
+ // instructions for scalar code, thus making bit-exact check fail
+ EXPECT_NEAR((y_expected - y_observed).squaredNorm(),
+ 0.,
+ kEpsilon * y_expected.squaredNorm());
}
}