Exact equality for floating point values seems to be processor/compiler sensitive, this causes correct tests to fails. Replacing EXPECT_EQ with EXPECT_NEAR with a tight tolerance fixes this.
diff --git a/internal/ceres/block_random_access_sparse_matrix_test.cc b/internal/ceres/block_random_access_sparse_matrix_test.cc
index ee40c1d..01a8c66 100644
--- a/internal/ceres/block_random_access_sparse_matrix_test.cc
+++ b/internal/ceres/block_random_access_sparse_matrix_test.cc
@@ -94,19 +94,27 @@
Matrix dense;
tsm->ToDenseMatrix(&dense);
+ double kTolerance = 1e-14;
+
// (0,0)
- EXPECT_EQ((dense.block(0, 0, 3, 3) - Matrix::Ones(3, 3)).norm(), 0);
+ EXPECT_NEAR((dense.block(0, 0, 3, 3) - Matrix::Ones(3, 3)).norm(),
+ 0.0,
+ kTolerance);
// (1,1)
- EXPECT_EQ((dense.block(3, 3, 4, 4) - 2 * 2 * Matrix::Ones(4, 4)).norm(), 0);
+ EXPECT_NEAR((dense.block(3, 3, 4, 4) - 2 * 2 * Matrix::Ones(4, 4)).norm(),
+ 0.0,
+ kTolerance);
// (1,2)
- EXPECT_EQ((dense.block(3, 3 + 4, 4, 5) - 2 * 3 * Matrix::Ones(4, 5)).norm(),
- 0);
+ EXPECT_NEAR((dense.block(3, 3 + 4, 4, 5) - 2 * 3 * Matrix::Ones(4, 5)).norm(),
+ 0.0,
+ kTolerance);
// (2,0)
- EXPECT_EQ((dense.block(3 + 4, 0, 5, 3) - 3 * 1 * Matrix::Ones(5, 3)).norm(),
- 0);
+ EXPECT_NEAR((dense.block(3 + 4, 0, 5, 3) - 3 * 1 * Matrix::Ones(5, 3)).norm(),
+ 0.0,
+ kTolerance);
// There is nothing else in the matrix besides these four blocks.
- EXPECT_EQ(dense.norm(), sqrt(9 + 16 * 16 + 36 * 20 + 9 * 15));
+ EXPECT_NEAR(dense.norm(), sqrt(9 + 16 * 16 + 36 * 20 + 9 * 15), kTolerance);
}
} // namespace internal