Fix infinite loop in mj_deleteFileVFS

This commit is contained in:
Kristian Hartikainen
2023-01-21 17:26:01 +00:00
parent d7844aa5be
commit 436fc6e77c
2 changed files with 32 additions and 10 deletions
+28 -6
View File
@@ -29,17 +29,39 @@ using EngineVfsTest = MujocoTest;
TEST_F(EngineVfsTest, AddFileVFS) {
constexpr char path[] = "engine/testdata/";
const std::string dir = GetTestDataFilePath(path);
std::string file = "refsite.xml";
std::string file1 = "activation.xml";
std::string file2 = "damper.xml";
std::string file3 = "refsite.xml";
std::FILE* fp = std::fopen((dir + file).c_str(), "r");
ASSERT_THAT(fp, NotNull()) << "Input file missing.";
std::fclose(fp);
std::FILE* fp1 = std::fopen((dir + file1).c_str(), "r");
ASSERT_THAT(fp1, NotNull()) << "Input file1 missing.";
std::fclose(fp1);
std::FILE* fp2 = std::fopen((dir + file2).c_str(), "r");
ASSERT_THAT(fp2, NotNull()) << "Input file2 missing.";
std::fclose(fp2);
std::FILE* fp3 = std::fopen((dir + file3).c_str(), "r");
ASSERT_THAT(fp3, NotNull()) << "Input file3 missing.";
std::fclose(fp3);
auto mj_vfs = std::make_unique<mjVFS>();
mj_defaultVFS(mj_vfs.get());
EXPECT_THAT(mj_addFileVFS(mj_vfs.get(), dir.c_str(), file.c_str()), 0);
EXPECT_THAT(mj_vfs->nfile, 0);
EXPECT_THAT(mj_addFileVFS(mj_vfs.get(), dir.c_str(), file1.c_str()), 0);
EXPECT_THAT(mj_vfs->nfile, 1);
mj_deleteFileVFS(mj_vfs.get(), file.c_str());
EXPECT_THAT(mj_addFileVFS(mj_vfs.get(), dir.c_str(), file2.c_str()), 0);
EXPECT_THAT(mj_vfs->nfile, 2);
EXPECT_THAT(mj_addFileVFS(mj_vfs.get(), dir.c_str(), file3.c_str()), 0);
EXPECT_THAT(mj_vfs->nfile, 3);
mj_deleteFileVFS(mj_vfs.get(), file1.c_str());
EXPECT_THAT(mj_vfs->nfile, 2);
mj_deleteFileVFS(mj_vfs.get(), file2.c_str());
EXPECT_THAT(mj_vfs->nfile, 1);
mj_deleteFileVFS(mj_vfs.get(), file3.c_str());
EXPECT_THAT(mj_vfs->nfile, 0);
mj_deleteVFS(mj_vfs.get());
}