From f8b92410d42a75feaba75a006b66ec114dd1186b Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Fri, 21 Nov 2025 06:24:24 -0800 Subject: [PATCH] Add test explaining body_rootid and body_weldid semantics PiperOrigin-RevId: 835197910 Change-Id: If85ca80d3b576e2469cf0d9900441ddb9fd64462 --- test/user/user_model_test.cc | 77 +++++++++++++++++++++++++++++++----- 1 file changed, 68 insertions(+), 9 deletions(-) diff --git a/test/user/user_model_test.cc b/test/user/user_model_test.cc index b3af89d1..7deb8894 100644 --- a/test/user/user_model_test.cc +++ b/test/user/user_model_test.cc @@ -45,9 +45,68 @@ static std::vector GetRow(const mjtNum* array, int ncolumn, int row) { // ----------------------------- test mjCModel -------------------------------- -using UserCModelTest = MujocoTest; +using UserModelTest = MujocoTest; -TEST_F(UserCModelTest, RepeatedNames) { +// clarify the semantic of body_rootid and body_weldid +TEST_F(UserModelTest, WeldRootID) { + static constexpr char xml[] = R"( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + )"; + + std::array error; + mjModel* model = LoadModelFromString(xml, error.data(), error.size()); + EXPECT_THAT(model, NotNull()); + + EXPECT_THAT(AsVector(model->body_rootid, model->nbody), + ElementsAre(0, 1, 1, 3, 3, 5, 5, 7, 7, 9, 9)); + EXPECT_THAT(AsVector(model->body_weldid, model->nbody), + ElementsAre(0, 1, 2, 3, 3, 0, 0, 0, 0, 0, 10)); + + mj_deleteModel(model); +} + +TEST_F(UserModelTest, RepeatedNames) { static constexpr char xml[] = R"( @@ -65,7 +124,7 @@ TEST_F(UserCModelTest, RepeatedNames) { EXPECT_THAT(error.data(), HasSubstr("repeated name 'geom1' in geom")); } -TEST_F(UserCModelTest, SameFrame) { +TEST_F(UserModelTest, SameFrame) { static constexpr char xml[] = R"( @@ -116,7 +175,7 @@ TEST_F(UserCModelTest, SameFrame) { mj_deleteModel(model); } -TEST_F(UserCModelTest, ActuatorSparsity) { +TEST_F(UserModelTest, ActuatorSparsity) { static constexpr char xml[] = R"( @@ -140,7 +199,7 @@ TEST_F(UserCModelTest, ActuatorSparsity) { mj_deleteModel(m); } -TEST_F(UserCModelTest, NestedZeroMassBodiesOK) { +TEST_F(UserModelTest, NestedZeroMassBodiesOK) { static constexpr char xml[] = R"( @@ -163,7 +222,7 @@ TEST_F(UserCModelTest, NestedZeroMassBodiesOK) { mj_deleteModel(model); } -TEST_F(UserCModelTest, NestedZeroMassBodiesWithJointOK) { +TEST_F(UserModelTest, NestedZeroMassBodiesWithJointOK) { static constexpr char xml[] = R"( @@ -190,7 +249,7 @@ TEST_F(UserCModelTest, NestedZeroMassBodiesWithJointOK) { mj_deleteModel(model); } -TEST_F(UserCModelTest, NestedZeroMassBodiesFail) { +TEST_F(UserModelTest, NestedZeroMassBodiesFail) { static constexpr char xml[] = R"( @@ -218,7 +277,7 @@ TEST_F(UserCModelTest, NestedZeroMassBodiesFail) { mj_deleteModel(model); } -TEST_F(UserCModelTest, ConvexHullForCollisionMeshes) { +TEST_F(UserModelTest, ConvexHullForCollisionMeshes) { static constexpr char xml[] = R"( @@ -262,7 +321,7 @@ TEST_F(UserCModelTest, ConvexHullForCollisionMeshes) { mj_deleteModel(model); } -TEST_F(UserCModelTest, ConvexHullForPairCollisionMeshes) { +TEST_F(UserModelTest, ConvexHullForPairCollisionMeshes) { static constexpr char xml[] = R"(