Enable float32 testing for most MuJoCo engine and user tests.
PiperOrigin-RevId: 886697701 Change-Id: I4a96fae03ea18494c3fcef8eb17b3b6f0863e9b7
This commit is contained in:
committed by
Copybara-Service
parent
cab4b73f41
commit
9fa3f6f77e
@@ -78,7 +78,6 @@ static constexpr char kCubeletModel[] = R"(
|
||||
|
||||
using ::std::string;
|
||||
using ::testing::AnyOf;
|
||||
using ::testing::DoubleNear;
|
||||
using ::testing::ElementsAre;
|
||||
using ::testing::NotNull;
|
||||
using ::testing::Pointwise;
|
||||
@@ -102,7 +101,7 @@ TEST_F(RayTest, NoExclusions) {
|
||||
mjtNum distance = mj_ray(model, data, pnt, vec, geomgroup, flg_static,
|
||||
bodyexclude, &geomid, nullptr);
|
||||
EXPECT_STREQ(mj_id2name(model, mjOBJ_GEOM, geomid), "static_group1");
|
||||
EXPECT_FLOAT_EQ(distance, 0.9);
|
||||
EXPECT_MJTNUM_EQ(distance, 0.9);
|
||||
mj_deleteData(data);
|
||||
mj_deleteModel(model);
|
||||
}
|
||||
@@ -125,26 +124,26 @@ TEST_F(RayTest, Exclusions) {
|
||||
mjtNum distance = mj_ray(model, data, pnt, vec, geomgroup, flg_static,
|
||||
bodyexclude, &geomid, nullptr);
|
||||
EXPECT_STREQ(mj_id2name(model, mjOBJ_GEOM, geomid), "static_group1");
|
||||
EXPECT_FLOAT_EQ(distance, 0.9);
|
||||
EXPECT_NEAR(distance, 0.9, MjTol(1e-12, 1e-5));
|
||||
|
||||
// Exclude nearest geom
|
||||
geomgroup[1] = 0;
|
||||
distance = mj_ray(model, data, pnt, vec, geomgroup, flg_static, bodyexclude,
|
||||
&geomid, nullptr);
|
||||
EXPECT_STREQ(mj_id2name(model, mjOBJ_GEOM, geomid), "group0");
|
||||
EXPECT_FLOAT_EQ(distance, 2.9);
|
||||
EXPECT_NEAR(distance, 2.9, MjTol(1e-12, 1e-5));
|
||||
|
||||
geomgroup[0] = 0;
|
||||
distance = mj_ray(model, data, pnt, vec, geomgroup, flg_static, bodyexclude,
|
||||
&geomid, nullptr);
|
||||
EXPECT_STREQ(mj_id2name(model, mjOBJ_GEOM, geomid), "group2");
|
||||
EXPECT_FLOAT_EQ(distance, 4.9);
|
||||
EXPECT_NEAR(distance, 4.9, MjTol(1e-12, 1e-5));
|
||||
|
||||
geomgroup[2] = 0;
|
||||
distance = mj_ray(model, data, pnt, vec, geomgroup, flg_static, bodyexclude,
|
||||
&geomid, nullptr);
|
||||
EXPECT_EQ(geomid, -1);
|
||||
EXPECT_FLOAT_EQ(distance, -1);
|
||||
EXPECT_NEAR(distance, -1, MjTol(1e-12, 1e-5));
|
||||
|
||||
mj_deleteData(data);
|
||||
mj_deleteModel(model);
|
||||
@@ -168,7 +167,7 @@ TEST_F(RayTest, ExcludeStatic) {
|
||||
mjtNum distance = mj_ray(model, data, pnt, vec, geomgroup, flg_static,
|
||||
bodyexclude, &geomid, nullptr);
|
||||
EXPECT_STREQ(mj_id2name(model, mjOBJ_GEOM, geomid), "group0");
|
||||
EXPECT_FLOAT_EQ(distance, 2.9);
|
||||
EXPECT_NEAR(distance, 2.9, MjTol(1e-12, 1e-5));
|
||||
mj_deleteData(data);
|
||||
mj_deleteModel(model);
|
||||
}
|
||||
@@ -216,7 +215,7 @@ TEST_F(RayTest, MultiRayEqualsSingleRay) {
|
||||
for (int j = 0; j < M; ++j) {
|
||||
int idx = i * M + j;
|
||||
dist = mj_ray(m, d, pnt, vec + 3 * idx, NULL, 1, -1, &rgeomid, nullptr);
|
||||
EXPECT_FLOAT_EQ(dist, dist_multiray[idx]);
|
||||
EXPECT_MJTNUM_EQ(dist, dist_multiray[idx]);
|
||||
EXPECT_EQ(rgeomid, rgeomid_multiray[idx]);
|
||||
nhits += dist >= 0;
|
||||
}
|
||||
@@ -271,11 +270,11 @@ TEST_F(RayTest, MultiRayNormalEqualsSingleRayNormal) {
|
||||
int idx = i * M + j;
|
||||
dist = mj_ray(m, d, pnt, vec + 3 * idx, NULL, 1, -1, &rgeomid,
|
||||
normal);
|
||||
EXPECT_FLOAT_EQ(dist, dist_multiray[idx]);
|
||||
EXPECT_MJTNUM_EQ(dist, dist_multiray[idx]);
|
||||
EXPECT_EQ(rgeomid, rgeomid_multiray[idx]);
|
||||
EXPECT_FLOAT_EQ(normal[0], normal_multiray[3*idx]);
|
||||
EXPECT_FLOAT_EQ(normal[1], normal_multiray[3*idx + 1]);
|
||||
EXPECT_FLOAT_EQ(normal[2], normal_multiray[3*idx + 2]);
|
||||
EXPECT_MJTNUM_EQ(normal[0], normal_multiray[3*idx]);
|
||||
EXPECT_MJTNUM_EQ(normal[1], normal_multiray[3*idx + 1]);
|
||||
EXPECT_MJTNUM_EQ(normal[2], normal_multiray[3*idx + 2]);
|
||||
nhits += dist >= 0;
|
||||
}
|
||||
}
|
||||
@@ -303,10 +302,10 @@ TEST_F(RayTest, EdgeCases) {
|
||||
// pnt contained in bounding box
|
||||
mjtNum pnt1[] = {-1, 0, 0};
|
||||
mju_multiRayPrepare(m, d, pnt1, NULL, NULL, 1, -1, mjMAXVAL, geom_ba, flags);
|
||||
EXPECT_FLOAT_EQ(geom_ba[0], -mjPI);
|
||||
EXPECT_FLOAT_EQ(geom_ba[1], 0);
|
||||
EXPECT_FLOAT_EQ(geom_ba[2], mjPI);
|
||||
EXPECT_FLOAT_EQ(geom_ba[3], mjPI);
|
||||
EXPECT_MJTNUM_EQ(geom_ba[0], -mjPI);
|
||||
EXPECT_MJTNUM_EQ(geom_ba[1], 0);
|
||||
EXPECT_MJTNUM_EQ(geom_ba[2], mjPI);
|
||||
EXPECT_MJTNUM_EQ(geom_ba[3], mjPI);
|
||||
mjtNum vec1[] = {1, 0, 0};
|
||||
mj_multiRay(m, d, pnt1, vec1, NULL, 1, -1, &rgeomid, &dist, nullptr, 1,
|
||||
mjMAXVAL);
|
||||
@@ -472,6 +471,9 @@ void _rayMeshTest(const mjModel* m) {
|
||||
}
|
||||
|
||||
TEST_F(RayTest, RayMeshPruning) {
|
||||
#ifdef mjUSESINGLE
|
||||
GTEST_SKIP() << "BVH pruning incorrectly rejects intersections in float32";
|
||||
#endif
|
||||
char error[1024];
|
||||
const string xml_path =
|
||||
GetTestDataFilePath("engine/testdata/ray/stanford_bunny.xml");
|
||||
@@ -529,11 +531,10 @@ TEST_F(RayTest, RayHfield) {
|
||||
|
||||
mj_forward(model, data);
|
||||
|
||||
double tol = 1e-8;
|
||||
EXPECT_THAT(data->sensordata[0], DoubleNear(1, tol));
|
||||
EXPECT_THAT(data->sensordata[1], DoubleNear(1, tol));
|
||||
EXPECT_THAT(data->sensordata[2], DoubleNear(1, tol));
|
||||
EXPECT_THAT(data->sensordata[3], DoubleNear(0.5, tol));
|
||||
EXPECT_THAT(data->sensordata[0], MjNear(1, 1e-8, 1e-5));
|
||||
EXPECT_THAT(data->sensordata[1], MjNear(1, 1e-8, 1e-5));
|
||||
EXPECT_THAT(data->sensordata[2], MjNear(1, 1e-8, 1e-5));
|
||||
EXPECT_THAT(data->sensordata[3], MjNear(0.5, 1e-8, 1e-5));
|
||||
|
||||
mj_deleteData(data);
|
||||
mj_deleteModel(model);
|
||||
@@ -551,6 +552,9 @@ static const char* const kHfieldModel = "engine/testdata/ray/hfield.xml";
|
||||
static const char* const kFlexModel = "engine/testdata/ray/flex.xml";
|
||||
|
||||
TEST_F(RayTest, RayNormal) {
|
||||
#ifdef mjUSESINGLE
|
||||
GTEST_SKIP() << "Flex face normals differ significantly in float32";
|
||||
#endif
|
||||
for (const char* path : {kPlaneModel, kSphereModel, kCapsuleModel,
|
||||
kEllipsoidModel, kCylinderModel, kBoxModel,
|
||||
kMeshModel, kSdfModel, kHfieldModel, kFlexModel}) {
|
||||
@@ -646,8 +650,8 @@ TEST_F(RayTest, RayNormal) {
|
||||
mjtNum expected_neg[3] = {-expected[0], -expected[1], -expected[2]};
|
||||
|
||||
// compare analytic with fin-diff approximation
|
||||
EXPECT_THAT(normal, AnyOf(Pointwise(DoubleNear(100 * eps), expected),
|
||||
Pointwise(DoubleNear(100 * eps), expected_neg)))
|
||||
EXPECT_THAT(normal, AnyOf(Pointwise(MjNear(100*eps, 1e-3), expected),
|
||||
Pointwise(MjNear(100*eps, 1e-3), expected_neg)))
|
||||
<< path << ", time " << d->time;
|
||||
|
||||
// increment count
|
||||
|
||||
Reference in New Issue
Block a user