Enable WriteReadCompare for models with assets.
PiperOrigin-RevId: 765500742 Change-Id: I119dbea11ed6771839b5e81d04070e95a51d3ed0
This commit is contained in:
committed by
Copybara-Service
parent
84ad22a590
commit
fe81373ffe
@@ -1381,19 +1381,30 @@ TEST_F(XMLWriterTest, WriteReadCompare) {
|
|||||||
std::string xml = p.path().string();
|
std::string xml = p.path().string();
|
||||||
|
|
||||||
// if file is meant to fail, skip it
|
// if file is meant to fail, skip it
|
||||||
if (absl::StrContains(p.path().string(), "100_humanoids") ||
|
if (absl::StrContains(p.path().string(), "malformed_") ||
|
||||||
absl::StrContains(p.path().string(), "malformed_") ||
|
// exclude files that are too slow to load
|
||||||
absl::StrContains(p.path().string(), "cow") ||
|
absl::StrContains(p.path().string(), "cow") ||
|
||||||
absl::StrContains(p.path().string(), "gmsh_") ||
|
absl::StrContains(p.path().string(), "gmsh_") ||
|
||||||
absl::StrContains(p.path().string(), "shark_") ||
|
absl::StrContains(p.path().string(), "shark_") ||
|
||||||
absl::StrContains(p.path().string(), "frameless_contact_hfield") ||
|
absl::StrContains(p.path().string(), "spheremesh") ||
|
||||||
absl::StrContains(p.path().string(), "spheremesh")) {
|
// exclude files that fail the comparison test
|
||||||
|
absl::StrContains(p.path().string(), "usd") ||
|
||||||
|
absl::StrContains(p.path().string(), "torus_maxhull") ||
|
||||||
|
absl::StrContains(p.path().string(), "fitmesh_") ||
|
||||||
|
absl::StrContains(p.path().string(), "lengthrange") ||
|
||||||
|
absl::StrContains(p.path().string(), "hfield_xml") ||
|
||||||
|
absl::StrContains(p.path().string(), "fromto_convex") ||
|
||||||
|
absl::StrContains(p.path().string(), "cube_skin") ||
|
||||||
|
absl::StrContains(p.path().string(), "cube_3x3x3")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// load model
|
// load model
|
||||||
std::array<char, 1000> error;
|
std::array<char, 1000> error;
|
||||||
mjModel* m = mj_loadXML(
|
mjSpec* s =
|
||||||
xml.c_str(), nullptr, error.data(), error.size());
|
mj_parseXML(xml.c_str(), nullptr, error.data(), error.size());
|
||||||
|
ASSERT_THAT(s, NotNull())
|
||||||
|
<< "Failed to load " << xml.c_str() << ": " << error.data();
|
||||||
|
mjModel* m = mj_compile(s, nullptr);
|
||||||
ASSERT_THAT(m, NotNull())
|
ASSERT_THAT(m, NotNull())
|
||||||
<< "Failed to load " << xml.c_str() << ": " << error.data();
|
<< "Failed to load " << xml.c_str() << ": " << error.data();
|
||||||
|
|
||||||
@@ -1402,32 +1413,33 @@ TEST_F(XMLWriterTest, WriteReadCompare) {
|
|||||||
ASSERT_THAT(d, testing::NotNull()) << "Failed to create data\n";
|
ASSERT_THAT(d, testing::NotNull()) << "Failed to create data\n";
|
||||||
|
|
||||||
// save and load back
|
// save and load back
|
||||||
mjModel* mtemp =
|
auto abs_path = p.path();
|
||||||
LoadModelFromString(SaveAndReadXml(m), error.data(), error.size());
|
mjSpec* stemp = mj_parseXMLString(SaveAndReadXml(s).c_str(), 0,
|
||||||
|
error.data(), error.size());
|
||||||
|
mjs_setString(stemp->modelfiledir,
|
||||||
|
abs_path.remove_filename().string().c_str());
|
||||||
|
mjModel* mtemp = mj_compile(stemp, nullptr);
|
||||||
|
|
||||||
if (!mtemp) {
|
ASSERT_THAT(mtemp, NotNull())
|
||||||
// if failing because assets are missing, accept the test
|
<< error.data() << " from " << xml.c_str();
|
||||||
ASSERT_THAT(error.data(), HasSubstr("file"))
|
|
||||||
<< error.data() << " from " << xml.c_str();
|
|
||||||
} else {
|
|
||||||
mjtNum tol = 0;
|
|
||||||
|
|
||||||
// for particularly sensitive models, relax the tolerance
|
mjtNum tol = 0;
|
||||||
if (absl::StrContains(p.path().string(), "belt.xml") ||
|
|
||||||
absl::StrContains(p.path().string(), "cable.xml")) {
|
|
||||||
tol = 1e-13;
|
|
||||||
}
|
|
||||||
|
|
||||||
// compare and delete
|
// for particularly sensitive models, relax the tolerance
|
||||||
std::string field = "";
|
if (absl::StrContains(p.path().string(), "belt.xml") ||
|
||||||
mjtNum result = CompareModel(m, mtemp, field);
|
absl::StrContains(p.path().string(), "cable.xml")) {
|
||||||
EXPECT_LE(result, tol)
|
tol = 1e-13;
|
||||||
<< "Loaded and saved models are different!\n"
|
|
||||||
<< "Affected file " << p.path().string() << '\n'
|
|
||||||
<< "Different field: " << field << '\n';
|
|
||||||
mj_deleteModel(mtemp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// compare and delete
|
||||||
|
std::string field = "";
|
||||||
|
mjtNum result = CompareModel(m, mtemp, field);
|
||||||
|
EXPECT_LE(result, tol)
|
||||||
|
<< "Loaded and saved models are different!\n"
|
||||||
|
<< "Affected file " << p.path().string() << '\n'
|
||||||
|
<< "Different field: " << field << '\n';
|
||||||
|
mj_deleteModel(mtemp);
|
||||||
|
|
||||||
// check for stack memory leak
|
// check for stack memory leak
|
||||||
mj_step(m, d);
|
mj_step(m, d);
|
||||||
EXPECT_EQ(d->pstack, 0) << "mjData stack memory leak detected in " <<
|
EXPECT_EQ(d->pstack, 0) << "mjData stack memory leak detected in " <<
|
||||||
@@ -1452,21 +1464,21 @@ TEST_F(XMLWriterTest, WriteReadCompare) {
|
|||||||
ASSERT_THAT(mtemp, NotNull());
|
ASSERT_THAT(mtemp, NotNull());
|
||||||
|
|
||||||
// compare with 0 tolerance
|
// compare with 0 tolerance
|
||||||
std::string field = "";
|
field = "";
|
||||||
mjtNum result = CompareModel(m, mtemp, field);
|
result = CompareModel(m, mtemp, field);
|
||||||
EXPECT_EQ(result, 0)
|
EXPECT_EQ(result, 0)
|
||||||
<< "Loaded and saved binary models are different!\n"
|
<< "Loaded and saved binary models are different!\n"
|
||||||
<< "Affected file " << p.path().string() << '\n'
|
<< "Affected file " << p.path().string() << '\n'
|
||||||
<< "Different field: " << field << '\n';
|
<< "Different field: " << field << '\n';
|
||||||
|
|
||||||
// clean up
|
// clean up
|
||||||
|
mj_deleteSpec(s);
|
||||||
|
mj_deleteSpec(stemp);
|
||||||
|
mj_deleteModel(m);
|
||||||
mj_deleteModel(mtemp);
|
mj_deleteModel(mtemp);
|
||||||
mj_deleteVFS(vfs);
|
mj_deleteVFS(vfs);
|
||||||
mju_free(vfs);
|
mju_free(vfs);
|
||||||
mju_free(buffer);
|
mju_free(buffer);
|
||||||
|
|
||||||
// delete model
|
|
||||||
mj_deleteModel(m);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user