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