From 18634b6726b7be8a70982e184cc84e0e71672aa6 Mon Sep 17 00:00:00 2001 From: Kyle Bayes Date: Thu, 20 Jun 2024 06:03:31 -0700 Subject: [PATCH] Add missing mj_deleteVFS to user unit tests. PiperOrigin-RevId: 645001843 Change-Id: I671514ea4cb7786e5d1f7f55404d4925e446a262 --- test/user/user_mesh_test.cc | 44 +++++++++++++++++++++------------- test/user/user_objects_test.cc | 12 +++++++++- 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/test/user/user_mesh_test.cc b/test/user/user_mesh_test.cc index 11fe0e9b..7fdd097e 100644 --- a/test/user/user_mesh_test.cc +++ b/test/user/user_mesh_test.cc @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -129,6 +130,7 @@ TEST_F(MjCMeshTest, LoadMSHWithVFS) { mjModel* model = LoadModelFromString(xml, error, error_sz, vfs.get()); EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("resource not found via provider or OS")); + mj_deleteVFS(vfs.get()); } TEST_F(MjCMeshTest, LoadOBJWithVFS) { @@ -154,6 +156,7 @@ TEST_F(MjCMeshTest, LoadOBJWithVFS) { mjModel* model = LoadModelFromString(xml, error, error_sz, vfs.get()); EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("resource not found via provider or OS")); + mj_deleteVFS(vfs.get()); } TEST_F(MjCMeshTest, LoadSTLWithVFS) { @@ -179,6 +182,7 @@ TEST_F(MjCMeshTest, LoadSTLWithVFS) { mjModel* model = LoadModelFromString(xml, error, error_sz, vfs.get()); EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("resource not found via provider or OS")); + mj_deleteVFS(vfs.get()); } // ------------- test content_type attributes ---------------------------------- @@ -206,6 +210,7 @@ TEST_F(MjCMeshTest, LoadMSHWithContentType) { mjModel* model = LoadModelFromString(xml, error, error_sz, vfs.get()); EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("resource not found via provider or OS")); + mj_deleteVFS(vfs.get()); } TEST_F(MjCMeshTest, LoadOBJWithContentType) { @@ -231,6 +236,7 @@ TEST_F(MjCMeshTest, LoadOBJWithContentType) { mjModel* model = LoadModelFromString(xml, error, error_sz, vfs.get()); EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("resource not found via provider or OS")); + mj_deleteVFS(vfs.get()); } TEST_F(MjCMeshTest, LoadSTLWithContentType) { @@ -256,6 +262,7 @@ TEST_F(MjCMeshTest, LoadSTLWithContentType) { mjModel* model = LoadModelFromString(xml, error, error_sz, vfs.get()); EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("resource not found via provider or OS")); + mj_deleteVFS(vfs.get()); } TEST_F(MjCMeshTest, LoadMSHWithContentTypeError) { @@ -281,6 +288,7 @@ TEST_F(MjCMeshTest, LoadMSHWithContentTypeError) { mjModel* model = LoadModelFromString(xml, error, error_sz, vfs.get()); EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("unsupported content type: 'model/unknown'")); + mj_deleteVFS(vfs.get()); } TEST_F(MjCMeshTest, LoadMSHWithContentTypeParam) { @@ -306,11 +314,12 @@ TEST_F(MjCMeshTest, LoadMSHWithContentTypeParam) { mjModel* model = LoadModelFromString(xml, error, error_sz, vfs.get()); EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("resource not found via provider or OS")); + mj_deleteVFS(vfs.get()); } -// ------------- test vertex de-duplication (STL) ------------------------------ +// ------------- test vertex deduplication (STL) ------------------------------ -TEST_F(MjCMeshTest, DeDuplicateSTLVertices) { +TEST_F(MjCMeshTest, DeduplicateSTLVertices) { const std::string xml_path = GetTestDataFilePath(kDuplicateVerticesPath); char error[1024]; size_t error_sz = 1024; @@ -795,15 +804,16 @@ TEST_F(MjCMeshTest, ExactConcaveInertia) { mjtNum d_cube = .5 - model->body_ipos[5]; mjtNum d_hole = .55 - model->body_ipos[5]; mjtNum I1 = I_cube - m_hole*(.8*.8 + .8*.8)/12; - mjtNum I2 = I_cube - m_hole*(.8*.8 + .9*.9)/12 + m_cube*d_cube*d_cube - m_hole*d_hole*d_hole; - EXPECT_LE(fabs(model->body_mass[1] - m_concave_cube), max_abs_err); - EXPECT_LE(fabs(model->body_mass[2] - m_concave_cube), max_abs_err); - EXPECT_LE(fabs(model->body_mass[3] - m_concave_cube), max_abs_err); - EXPECT_LE(fabs(model->body_mass[4] - m_concave_cube), max_abs_err); + mjtNum I2 = I_cube - m_hole*(.8*.8 + .9*.9)/12 + + m_cube*d_cube*d_cube - m_hole*d_hole*d_hole; + EXPECT_LE(mju_abs(model->body_mass[1] - m_concave_cube), max_abs_err); + EXPECT_LE(mju_abs(model->body_mass[2] - m_concave_cube), max_abs_err); + EXPECT_LE(mju_abs(model->body_mass[3] - m_concave_cube), max_abs_err); + EXPECT_LE(mju_abs(model->body_mass[4] - m_concave_cube), max_abs_err); for (int i = 3; i < 15; i += 3) { - EXPECT_LE(fabs(model->body_inertia[i] - I1), max_abs_err); - EXPECT_LE(fabs(model->body_inertia[i+1] - I2), max_abs_err); - EXPECT_LE(fabs(model->body_inertia[i+2] - I2), max_abs_err); + EXPECT_LE(mju_abs(model->body_inertia[i] - I1), max_abs_err); + EXPECT_LE(mju_abs(model->body_inertia[i+1] - I2), max_abs_err); + EXPECT_LE(mju_abs(model->body_inertia[i+2] - I2), max_abs_err); } mj_deleteModel(model); } @@ -815,10 +825,10 @@ TEST_F(MjCMeshTest, ExactConvexInertia) { // https://en.wikipedia.org/wiki/List_of_moments_of_inertia mjtNum m_solid_cube = 1.; mjtNum I_solid_cube = 1./6. * m_solid_cube; - EXPECT_LE(fabs(model->body_mass[1] - m_solid_cube), max_abs_err); - EXPECT_LE(fabs(model->body_mass[2] - m_solid_cube), max_abs_err); + EXPECT_LE(mju_abs(model->body_mass[1] - m_solid_cube), max_abs_err); + EXPECT_LE(mju_abs(model->body_mass[2] - m_solid_cube), max_abs_err); for (int i = 3; i < 9; i++) { - EXPECT_LE(fabs(model->body_inertia[i] - I_solid_cube), max_abs_err); + EXPECT_LE(mju_abs(model->body_inertia[i] - I_solid_cube), max_abs_err); } mj_deleteModel(model); } @@ -830,10 +840,10 @@ TEST_F(MjCMeshTest, ExactShellInertia) { // see https://en.wikipedia.org/wiki/List_of_moments_of_inertia mjtNum m_hollow_cube = 6.; mjtNum I_hollow_cube = 5./18. * m_hollow_cube; - EXPECT_LE(fabs(model->body_mass[1] - m_hollow_cube), max_abs_err); - EXPECT_LE(fabs(model->body_inertia[3] - I_hollow_cube), max_abs_err); - EXPECT_LE(fabs(model->body_inertia[4] - I_hollow_cube), max_abs_err); - EXPECT_LE(fabs(model->body_inertia[5] - I_hollow_cube), max_abs_err); + EXPECT_LE(mju_abs(model->body_mass[1] - m_hollow_cube), max_abs_err); + EXPECT_LE(mju_abs(model->body_inertia[3] - I_hollow_cube), max_abs_err); + EXPECT_LE(mju_abs(model->body_inertia[4] - I_hollow_cube), max_abs_err); + EXPECT_LE(mju_abs(model->body_inertia[5] - I_hollow_cube), max_abs_err); mj_deleteModel(model); } diff --git a/test/user/user_objects_test.cc b/test/user/user_objects_test.cc index bb4e7e3e..9328f52f 100644 --- a/test/user/user_objects_test.cc +++ b/test/user/user_objects_test.cc @@ -70,6 +70,7 @@ TEST_F(VfsTest, HFieldPngWithVFS) { EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("resource not found via provider or OS filesystem")); + mj_deleteVFS(vfs.get()); } TEST_F(VfsTest, HFieldCustomWithVFS) { @@ -97,6 +98,7 @@ TEST_F(VfsTest, HFieldCustomWithVFS) { EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("resource not found via provider or OS filesystem")); + mj_deleteVFS(vfs.get()); } TEST_F(VfsTest, TexturePngWithVFS) { @@ -125,6 +127,7 @@ TEST_F(VfsTest, TexturePngWithVFS) { EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("resource not found via provider or OS filesystem")); + mj_deleteVFS(vfs.get()); } TEST_F(VfsTest, TextureCustomWithVFS) { @@ -153,6 +156,7 @@ TEST_F(VfsTest, TextureCustomWithVFS) { EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("resource not found via provider or OS filesystem")); + mj_deleteVFS(vfs.get()); } // ------------------------ test content_type attribute ------------------------ @@ -185,6 +189,7 @@ TEST_F(ContentTypeTest, HFieldPngWithContentType) { EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("resource not found via provider or OS filesystem")); + mj_deleteVFS(vfs.get()); } TEST_F(ContentTypeTest, HFieldCustomWithContentType) { @@ -213,6 +218,7 @@ TEST_F(ContentTypeTest, HFieldCustomWithContentType) { EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("resource not found via provider or OS filesystem")); + mj_deleteVFS(vfs.get()); } TEST_F(ContentTypeTest, HFieldWithContentTypeError) { @@ -240,6 +246,7 @@ TEST_F(ContentTypeTest, HFieldWithContentTypeError) { mjModel* model = LoadModelFromString(xml, error, error_sz, vfs.get()); EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("unsupported content type: 'image/jpeg'")); + mj_deleteVFS(vfs.get()); } TEST_F(ContentTypeTest, TexturePngWithContentType) { @@ -268,6 +275,7 @@ TEST_F(ContentTypeTest, TexturePngWithContentType) { EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("resource not found via provider or OS filesystem")); + mj_deleteVFS(vfs.get()); } TEST_F(ContentTypeTest, TextureCustomWithContentType) { @@ -297,6 +305,7 @@ TEST_F(ContentTypeTest, TextureCustomWithContentType) { EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("resource not found via provider or OS filesystem")); + mj_deleteVFS(vfs.get()); } TEST_F(ContentTypeTest, TextureWithContentTypeError) { @@ -325,6 +334,7 @@ TEST_F(ContentTypeTest, TextureWithContentTypeError) { mjModel* model = LoadModelFromString(xml, error, error_sz, vfs.get()); EXPECT_THAT(model, IsNull()); EXPECT_THAT(error, HasSubstr("unsupported content type: 'image/jpeg'")); + mj_deleteVFS(vfs.get()); } TEST_F(ContentTypeTest, TextureLoadPng) { @@ -370,7 +380,7 @@ TEST_F(ContentTypeTest, TextureLoadPng) { EXPECT_THAT(model, NotNull()); mj_deleteModel(model); - mj_deleteFileVFS(vfs.get(), filename); + mj_deleteVFS(vfs.get()); } // ------------------------ test keyframes -------------------------------------