diff --git a/src/engine/engine_vfs.c b/src/engine/engine_vfs.c index cb423b1a..7b15fab9 100644 --- a/src/engine/engine_vfs.c +++ b/src/engine/engine_vfs.c @@ -179,7 +179,7 @@ int mj_deleteFileVFS(mjVFS* vfs, const char* filename) { mju_free(vfs->filedata[i]); // scroll remaining files forward - for (int j = i; j < vfs->nfile - 1; ++j) { + for (int j=i; jnfile-1; j++) { mjSTRNCPY(vfs->filename[j], vfs->filename[j+1]); vfs->filesize[j] = vfs->filesize[j+1]; vfs->filedata[j] = vfs->filedata[j+1]; diff --git a/test/engine/engine_vfs_test.cc b/test/engine/engine_vfs_test.cc index c8ac4c88..a3b17327 100644 --- a/test/engine/engine_vfs_test.cc +++ b/test/engine/engine_vfs_test.cc @@ -51,15 +51,29 @@ TEST_F(EngineVfsTest, AddFileVFS) { 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); + EXPECT_THAT(mj_vfs->filename[0], file1); + EXPECT_THAT(mj_addFileVFS(mj_vfs.get(), dir.c_str(), file2.c_str()), 0); EXPECT_THAT(mj_vfs->nfile, 2); + EXPECT_THAT(mj_vfs->filename[0], file1); + EXPECT_THAT(mj_vfs->filename[1], file2); + EXPECT_THAT(mj_addFileVFS(mj_vfs.get(), dir.c_str(), file3.c_str()), 0); EXPECT_THAT(mj_vfs->nfile, 3); + EXPECT_THAT(mj_vfs->filename[0], file1); + EXPECT_THAT(mj_vfs->filename[1], file2); + EXPECT_THAT(mj_vfs->filename[2], file3); + 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); + EXPECT_THAT(mj_vfs->filename[0], file2); + EXPECT_THAT(mj_vfs->filename[1], file3); + mj_deleteFileVFS(mj_vfs.get(), file3.c_str()); + EXPECT_THAT(mj_vfs->nfile, 1); + EXPECT_THAT(mj_vfs->filename[0], file2); + + mj_deleteFileVFS(mj_vfs.get(), file2.c_str()); EXPECT_THAT(mj_vfs->nfile, 0); mj_deleteVFS(mj_vfs.get());