From 9fa3f6f77eab393e3f4efc7cbf3db6a1cc15aaac Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Fri, 20 Mar 2026 04:04:34 -0700 Subject: [PATCH] Enable float32 testing for most MuJoCo engine and user tests. PiperOrigin-RevId: 886697701 Change-Id: I4a96fae03ea18494c3fcef8eb17b3b6f0863e9b7 --- test/engine/engine_collision_box_test.cc | 6 +- test/engine/engine_collision_sdf_test.cc | 6 +- test/engine/engine_core_constraint_test.cc | 25 +++-- test/engine/engine_core_smooth_test.cc | 80 +++++++-------- test/engine/engine_derivative_test.cc | 53 +++++----- test/engine/engine_forward_test.cc | 73 ++++++++----- test/engine/engine_inverse_test.cc | 4 +- test/engine/engine_passive_test.cc | 23 +++-- test/engine/engine_plugin_test.cc | 12 +-- test/engine/engine_ray_test.cc | 50 ++++----- test/engine/engine_sensor_test.cc | 113 +++++++++++---------- test/engine/engine_setconst_test.cc | 15 ++- test/engine/engine_solver_test.cc | 15 +-- test/engine/engine_support_test.cc | 63 ++++++------ test/engine/engine_util_blas_test.cc | 8 +- test/engine/engine_util_misc_test.cc | 44 ++++---- test/engine/engine_util_solve_test.cc | 55 +++++----- test/engine/engine_util_spatial_test.cc | 32 +++--- test/fixture.h | 43 ++++++++ test/pipeline_test.cc | 16 ++- test/plugin/actuator/pid_test.cc | 12 +-- test/plugin/elasticity/elasticity_test.cc | 3 + test/user/user_flex_test.cc | 9 +- test/user/user_mesh_test.cc | 74 +++++++------- test/user/user_model_test.cc | 12 +-- test/user/user_objects_test.cc | 78 ++++++++------ test/xml/xml_native_reader_test.cc | 29 +++--- test/xml/xml_native_writer_test.cc | 6 ++ 28 files changed, 536 insertions(+), 423 deletions(-) diff --git a/test/engine/engine_collision_box_test.cc b/test/engine/engine_collision_box_test.cc index e73f4ad9..e75a6c83 100644 --- a/test/engine/engine_collision_box_test.cc +++ b/test/engine/engine_collision_box_test.cc @@ -30,7 +30,6 @@ namespace { using MjCollisionBoxTest = MujocoTest; using ::testing::NotNull; -using ::testing::DoubleNear; static const char* const kBad0FilePath = "engine/testdata/collision_box/boxbox_bad0.xml"; @@ -266,7 +265,8 @@ TEST_F(MjCollisionBoxTest, BoxSphere) { data->qpos[2] = z; mj_forward(model, data); EXPECT_EQ(data->ncon, 2); - EXPECT_THAT(data->contact[0].dist, DoubleNear(data->contact[1].dist, 1e-8)); + EXPECT_THAT(data->contact[0].dist, + MjNear(data->contact[1].dist, 1e-8, 1e-6)); } mj_deleteData(data); @@ -294,7 +294,7 @@ TEST_F(MjCollisionBoxTest, BoxBoxContactDistance) { for (mjfCollision collision : {mjc_BoxBox, mjc_Convex}) { int n = collision(model, data, contact, 0, 1, 0.0); for (int i = 0; i < n; i++) { - EXPECT_NEAR(contact[i].dist, -0.5, 1.0e-8); + EXPECT_NEAR(contact[i].dist, -0.5, MjTol(1e-8, 1e-6)); } } diff --git a/test/engine/engine_collision_sdf_test.cc b/test/engine/engine_collision_sdf_test.cc index a8f93c32..bcc0d1c3 100644 --- a/test/engine/engine_collision_sdf_test.cc +++ b/test/engine/engine_collision_sdf_test.cc @@ -59,7 +59,8 @@ TEST_F(SdfTest, SdfPrimitive) { mjtNum gradient[3], dist[kgeoms][kpoints] = { {0, 0, 0, 0, 1, 1}, // plane {-1, 0, 0, mju_sqrt(2)-1, mju_sqrt(2)-1, mju_sqrt(3)-1}, // sphere - {-.1, .9, .9, mju_sqrt(2)-.1, .9, mju_sqrt(2)-.1}, // capsule + {(mjtNum)-.1, (mjtNum).9, (mjtNum).9, + mju_sqrt(2)-(mjtNum).1, (mjtNum).9, mju_sqrt(2)-(mjtNum).1}, // capsule {-1, 0, 0, mju_sqrt(2)-1, 0, mju_sqrt(2)-1}, // cylinder {-mju_sqrt(3), 0, 0, 0, 0, 0}, // box }; @@ -72,7 +73,8 @@ TEST_F(SdfTest, SdfPrimitive) { sdf.type = mjSDFTYPE_SINGLE; sdf.geomtype = (mjtGeom*)(model->geom_type+i); for (int j = 0; j < kpoints; j++) { - EXPECT_NEAR(mjc_distance(model, data, &sdf, points[j]), dist[i][j], 1e-9); + EXPECT_NEAR(mjc_distance(model, data, &sdf, points[j]), dist[i][j], + MjTol(1e-9, 5e-7)); mjc_gradient(model, data, &sdf, gradient, points[j]); } } diff --git a/test/engine/engine_core_constraint_test.cc b/test/engine/engine_core_constraint_test.cc index 7bb7f0a1..b5ab5e0e 100644 --- a/test/engine/engine_core_constraint_test.cc +++ b/test/engine/engine_core_constraint_test.cc @@ -33,7 +33,6 @@ namespace mujoco { namespace { -using ::testing::DoubleNear; using ::testing::NotNull; using ::testing::Pointwise; using CoreConstraintTest = MujocoTest; @@ -63,6 +62,9 @@ void RotationResidual(const mjModel *model, mjData *data, // validate rotational Jacobian used in welds TEST_F(CoreConstraintTest, WeldRotJacobian) { +#ifdef mjUSESINGLE + GTEST_SKIP() << "FD Jacobian with eps=1e-6 below float32 precision"; +#endif constexpr char xml[] = R"(