From 8a402631a3f6d7502301f30ff412b98b92209c6d Mon Sep 17 00:00:00 2001 From: Nimrod Gileadi Date: Tue, 21 Mar 2023 03:38:27 -0700 Subject: [PATCH] Add another test for sizes of arena pointers in mjData. PiperOrigin-RevId: 518224754 Change-Id: I034f6778dedeeef49d2bb4a06337044469450f40 --- test/engine/engine_io_test.cc | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/test/engine/engine_io_test.cc b/test/engine/engine_io_test.cc index c7a750f9..6539930c 100644 --- a/test/engine/engine_io_test.cc +++ b/test/engine/engine_io_test.cc @@ -224,6 +224,36 @@ TEST_F(EngineIoTest, ResetVariableSizes) { mj_deleteModel(model); } +TEST_F(EngineIoTest, MakeDataResetsAllArenaPointerSizes) { + constexpr char xml[] = ""; + + std::array error; + mjModel* model = LoadModelFromString(xml, error.data(), error.size()); + ASSERT_THAT(model, NotNull()) << "Failed to load model: " << error.data(); + mjData* data = mj_makeData(model); + ASSERT_THAT(data, NotNull()); + + // without calling mj_forward, all array sizes should be zero. + EXPECT_EQ(data->parena, 0) << "expecting empty arena"; + +#define X(type, name, nr, nc) \ + EXPECT_EQ(nr*nc, 0) << "expecting (" #nr " x " #nc ") to be zero"; + +#undef MJ_D +#undef MJ_M +#define MJ_D(name) data->name +#define MJ_M(name) model->name + MJDATA_ARENA_POINTERS; +#undef MJ_D +#undef MJ_M +#define MJ_D(n) n +#define MJ_M(n) n +#undef X + + mj_deleteData(data); + mj_deleteModel(model); +} + using ValidateReferencesTest = MujocoTest; TEST_F(ValidateReferencesTest, BodyReferences) {