38 #include <gtest/gtest.h>
44 template <
int BLOCK_WIDTH>
53 TEST(BlockmemGridmap, BlockWidth)
61 TEST(BlockmemGridmap, ResetClear)
65 for (
int i = 0; i < 2; i++)
67 for (
int s = 4;
s <= 6;
s += 2)
73 for (i[0] = 0; i[0] <
s; ++i[0])
75 for (i[1] = 0; i[1] <
s; ++i[1])
77 for (i[2] = 0; i[2] <
s; ++i[2])
79 ASSERT_EQ(gm[i], 0.0);
85 for (i[0] = 0; i[0] <
s; ++i[0])
87 for (i[1] = 0; i[1] <
s; ++i[1])
89 for (i[2] = 0; i[2] <
s; ++i[2])
91 ASSERT_EQ(gm[i], 3.0);
99 TEST(BlockmemGridmap, ClearAndCopyPartially)
103 gm_base.
reset(base_size);
106 for (p[1] = 0; p[1] < base_size[1]; ++p[1])
108 for (p[2] = 0; p[2] < base_size[2]; ++p[2])
110 gm_base[p] = p[0] * base_size[1] * base_size[2] + p[1] * base_size[2] + p[2];
124 for (p[1] = 0; p[1] < base_size[1]; ++p[1])
126 for (p[2] = 0; p[2] < base_size[2]; ++p[2])
128 if ((copy_min_pos[0] <= p[0]) && (p[0] <= copy_max_pos[0]) &&
129 (copy_min_pos[1] <= p[1]) && (p[1] <= copy_max_pos[1]) &&
130 (copy_min_pos[2] <= p[2]) && (p[2] <= copy_max_pos[2]))
132 EXPECT_EQ(gm[p], -1) << p[0] <<
"," << p[1] <<
"," << p[2];
136 EXPECT_EQ(gm[p], gm_base[p]) << p[0] <<
"," << p[1] <<
"," << p[2];
143 gm_update.
reset(base_size);
146 for (p[1] = 0; p[1] < base_size[1]; ++p[1])
148 for (p[2] = 0; p[2] < base_size[2]; ++p[2])
150 gm_update[p] = p[0] * base_size[1] * base_size[2] + p[1] * base_size[2] + p[2] * -1;
160 for (p[1] = 0; p[1] < base_size[1]; ++p[1])
162 for (p[2] = 0; p[2] < base_size[2]; ++p[2])
164 if ((copy_min_pos[0] <= p[0]) && (p[0] <= copy_max_pos[0]) &&
165 (copy_min_pos[1] <= p[1]) && (p[1] <= copy_max_pos[1]) &&
166 (copy_min_pos[2] <= p[2]) && (p[2] <= copy_max_pos[2]))
168 ASSERT_EQ(gm[p], gm_update[p]);
172 ASSERT_EQ(gm[p], gm_base[p]);
179 TEST(BlockmemGridmap, CopyPartiallyWithOffset)
183 gm_src.
reset(src_size);
186 for (p[1] = 0; p[1] < src_size[1]; ++p[1])
188 for (p[2] = 0; p[2] < src_size[2]; ++p[2])
190 gm_src[p] = p[0] * src_size[1] * src_size[2] + p[1] * src_size[2] + p[2];
197 gm_dst.
reset(dst_size);
209 for (p[1] = 0; p[1] < dst_size[1]; ++p[1])
211 for (p[2] = 0; p[2] < dst_size[2]; ++p[2])
213 if ((dst_min[0] <= p[0]) && (p[0] <= dst_max[0]) &&
214 (dst_min[1] <= p[1]) && (p[1] <= dst_max[1]) &&
215 (dst_min[2] <= p[2]) && (p[2] <= dst_max[2]))
217 ASSERT_EQ(gm_dst[p], gm_src[p - dst_min + src_min]);
221 ASSERT_EQ(gm_dst[p], -1);
228 TEST(BlockmemGridmap, WriteRead)
237 for (i[0] = 0; i[0] <
s; ++i[0])
239 for (i[1] = 0; i[1] <
s; ++i[1])
241 for (i[2] = 0; i[2] <
s; ++i[2])
243 gm[i] = i[2] * 100 + i[1] * 10 + i[0];
248 for (i[0] = 0; i[0] <
s; ++i[0])
250 for (i[1] = 0; i[1] <
s; ++i[1])
252 for (i[2] = 0; i[2] <
s; ++i[2])
254 ASSERT_EQ(gm[i], i[2] * 100 + i[1] * 10 + i[0]);
260 TEST(BlockmemGridmap, OuterBoundary)
269 const int outer = 0x10;
270 for (i[0] = -outer; i[0] <
s + outer; ++i[0])
272 for (i[1] = -outer; i[1] <
s + outer; ++i[1])
274 for (i[2] = -outer; i[2] <
s + outer; ++i[2])
276 if (i[0] >= 0 && i[1] >= 0 && i[2] >= 0 &&
277 i[0] <
s && i[1] <
s && i[2] <
s)
293 int main(
int argc,
char** argv)
295 testing::InitGoogleTest(&argc, argv);
297 return RUN_ALL_TESTS();