Implement hash map for mj_name2id using djb2 and linear probing.
PiperOrigin-RevId: 499485127 Change-Id: I5aed6549db18b92d7c8a3b7590e50a00ce13a439
This commit is contained in:
committed by
Copybara-Service
parent
5261cceb30
commit
f1007df013
@@ -155,6 +155,114 @@ TEST_F(JacobianTest, SubtreeJacNoInternalAcc) {
|
||||
mj_deleteModel(model);
|
||||
}
|
||||
|
||||
using Name2idTest = MujocoTest;
|
||||
|
||||
static constexpr char name2idTestingModel[] = R"(
|
||||
<mujoco>
|
||||
<asset>
|
||||
<texture name="texture1" type="2d" builtin="checker" rgb1="1 1 1"
|
||||
rgb2="1 1 1" width="300" height="300" mark="none"/>
|
||||
<material name="material1" texture="texture1" texrepeat="1 1"
|
||||
texuniform="true" reflectance=".2"/>
|
||||
</asset>
|
||||
|
||||
<asset>
|
||||
<mesh name="mesh1" vertex="0 0 0 1 0 0 0 1 0 0 0 1"/>
|
||||
</asset>
|
||||
|
||||
<worldbody>
|
||||
<light name="light1" pos="0 0 1"/>
|
||||
<site name="site1" pos="0 0 .3" size=".01"/>
|
||||
<site name="site2" pos="-.1 -.1 -.1" size=".01"/>
|
||||
<camera name="camera1" pos="0 -1.3 .5" xyaxes="1 0 0 0 1 2"/>
|
||||
<body name="body1">
|
||||
<joint axis="0 1 0" name="joint1"/>
|
||||
<geom size="1" name="body1_geom1"/>
|
||||
<geom size="1" name="body1_geom2"/>
|
||||
</body>
|
||||
<body name="body2">
|
||||
<joint axis="0 1 0" name="joint2"/>
|
||||
<geom size="1" name="body2_geom1"/>
|
||||
<geom size="1" name="camera1"/>
|
||||
</body>
|
||||
<body name="">
|
||||
</body>
|
||||
</worldbody>
|
||||
|
||||
<tendon>
|
||||
<spatial name="tendon1" limited="true" range="0 0.35" width="0.003">
|
||||
<site site="site1"/>
|
||||
<site site="site2"/>
|
||||
</spatial>
|
||||
</tendon>
|
||||
|
||||
<actuator>
|
||||
<motor name="actuator1" joint="joint1" gear="1"/>
|
||||
</actuator>
|
||||
|
||||
<sensor>
|
||||
<accelerometer name="sensor1" site="site1"/>
|
||||
</sensor>
|
||||
</mujoco>
|
||||
)";
|
||||
|
||||
TEST_F(Name2idTest, FindIds) {
|
||||
mjModel* model = LoadModelFromString(name2idTestingModel);
|
||||
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_BODY, "world"), 0);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_BODY, "body1"), 1);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_BODY, "body2"), 2);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_GEOM, "body1_geom1"), 0);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_GEOM, "body1_geom2"), 1);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_JOINT, "joint2"), 1);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_MESH, "mesh1"), 0);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_LIGHT, "light1"), 0);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_CAMERA, "camera1"), 0);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_SITE, "site2"), 1);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_MATERIAL, "material1"), 0);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_TEXTURE, "texture1"), 0);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_TENDON, "tendon1"), 0);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_ACTUATOR, "actuator1"), 0);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_SENSOR, "sensor1"), 0);
|
||||
|
||||
mj_deleteModel(model);
|
||||
}
|
||||
|
||||
TEST_F(Name2idTest, MissingIds) {
|
||||
mjModel* model = LoadModelFromString(name2idTestingModel);
|
||||
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_BODY, "abody3"), -1);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_GEOM, "abody2_geom2"), -1);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_JOINT, "joint3"), -1);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_MESH, "amesh2"), -1);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_LIGHT, "alight2"), -1);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_CAMERA, "acamera2"), -1);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_SITE, "asite3"), -1);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_MATERIAL, "amaterial2"), -1);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_TEXTURE, "atexture2"), -1);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_TENDON, "atendon2"), -1);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_ACTUATOR, "aactuator2"), -1);
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_SENSOR, "asensor2"), -1);
|
||||
|
||||
mj_deleteModel(model);
|
||||
}
|
||||
|
||||
TEST_F(Name2idTest, EmptyIds) {
|
||||
mjModel* model = LoadModelFromString(name2idTestingModel);
|
||||
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_BODY, ""), -1);
|
||||
|
||||
mj_deleteModel(model);
|
||||
}
|
||||
|
||||
TEST_F(Name2idTest, Namespaces) {
|
||||
mjModel* model = LoadModelFromString(name2idTestingModel);
|
||||
|
||||
EXPECT_THAT(mj_name2id(model, mjOBJ_GEOM, "camera1"), 3);
|
||||
|
||||
mj_deleteModel(model);
|
||||
}
|
||||
|
||||
using VersionTest = MujocoTest;
|
||||
|
||||
TEST_F(VersionTest, MjVersion) {
|
||||
|
||||
Reference in New Issue
Block a user