When saving XMLs, don't round floats that are bigger than INT_MAX. Fixes #1278

PiperOrigin-RevId: 590692020
Change-Id: Icd11d20f47bc4163eb4378f4cb031b8fd9d13612
This commit is contained in:
Yuval Tassa
2023-12-13 13:12:29 -08:00
committed by Copybara-Service
parent 0d37670698
commit 5b2c98f8f1
2 changed files with 27 additions and 1 deletions
+24
View File
@@ -1178,5 +1178,29 @@ TEST_F(DecompilerTest, DoesntSaveInferredStatitics) {
mj_deleteModel(model);
}
TEST_F(DecompilerTest, VeryLargeNumbers) {
static constexpr char xml[] = R"(
<mujoco>
<compiler angle="radian"/>
<worldbody>
<camera focal="16777217 1" sensorsize="1 1" resolution="100 100"/>
<body pos="1e+20 0 0">
<geom size="1"/>
<joint axis="1 0 0" range="-1e+10 1e+10"/>
</body>
</worldbody>
</mujoco>
)";
std::array<char, 1024> error;
mjModel* model = LoadModelFromString(xml, error.data(), error.size());
ASSERT_THAT(model, NotNull()) << error.data();
std::string saved_xml = SaveAndReadXml(model);
// note, focal is float and loses precision 16777217 -> 16777216
EXPECT_THAT(saved_xml, HasSubstr("focal=\"16777216 1\""));
EXPECT_THAT(saved_xml, HasSubstr("pos=\"1e+20 0 0\""));
EXPECT_THAT(saved_xml, HasSubstr("range=\"-1e+10 1e+10\""));
mj_deleteModel(model);
}
} // namespace
} // namespace mujoco