15 #include <gmock/gmock.h>
16 #include <gtest/gtest.h>
21 #include <range/v3/range/conversion.hpp>
32 TEST(OccupancyGrid2, FreeAtCell) {
33 constexpr
double kResolution = 1.;
35 const auto grid = StaticOccupancyGrid<5, 5>{
36 {
false,
false,
false,
false,
true,
false,
false,
false,
true,
false,
false,
false,
true,
37 false,
false,
false,
true,
false,
false,
false,
true,
false,
false,
false,
false},
40 EXPECT_TRUE(grid.free_at(0));
41 EXPECT_FALSE(grid.free_at(8));
42 EXPECT_FALSE(grid.free_at(2, 2));
43 EXPECT_TRUE(grid.free_at(3, 2));
44 EXPECT_FALSE(grid.free_at(Eigen::Vector2i(0, 4)));
45 EXPECT_TRUE(grid.free_at(Eigen::Vector2i(1, 4)));
48 TEST(OccupancyGrid2, FreeNearCell) {
49 constexpr
double kResolution = 1.;
51 const auto grid = StaticOccupancyGrid<5, 5>{
52 {
false,
false,
false,
false,
true,
false,
false,
false,
true,
false,
false,
false,
true,
53 false,
false,
false,
true,
false,
false,
false,
true,
false,
false,
false,
false},
56 EXPECT_FALSE(grid.free_near(3.25, 1.75));
57 EXPECT_TRUE(grid.free_near(4, 4.25));
58 EXPECT_FALSE(grid.free_near(Eigen::Vector2d(3.25, 1.75)));
59 EXPECT_TRUE(grid.free_near(Eigen::Vector2d(4, 4.25)));
62 TEST(OccupancyGrid2, GlobalCoordinatesAtCell) {
63 constexpr
double kResolution = 1.;
65 const auto grid = StaticOccupancyGrid<5, 5>{
66 {
false,
false,
false,
false,
true,
false,
false,
false,
true,
false,
false,
false,
true,
67 false,
false,
false,
true,
false,
false,
false,
true,
false,
false,
false,
false},
71 constexpr
auto kFrame = StaticOccupancyGrid<5, 5>::Frame::kGlobal;
72 EXPECT_TRUE(grid.coordinates_at(grid.index_at(2, 2), kFrame).isApprox(Eigen::Vector2d(-1.5, 3.5)));
75 TEST(OccupancyGrid2, AllFreeCells) {
76 const auto grid = StaticOccupancyGrid<2, 5>{{
false,
false,
false,
false,
true,
false,
false,
false,
true,
false}};
78 const auto expected_free_cells = std::vector<std::size_t>{0, 1, 2, 3, 5, 6, 7, 9};
79 ASSERT_THAT(grid.free_cells() | ranges::to<std::vector>, testing::Pointwise(testing::Eq(), expected_free_cells));
82 TEST(OccupancyGrid2, ObstacleData) {
83 const auto grid = StaticOccupancyGrid<5, 2>{{
false,
false,
false,
false,
true,
false,
false,
false,
true,
false}};
86 #pragma GCC diagnostic push
87 #pragma GCC diagnostic ignored "-Warray-bounds"
88 #pragma GCC diagnostic ignored "-Wstringop-overflow"
90 ASSERT_THAT(grid.obstacle_data() | ranges::to<std::vector>, testing::Pointwise(testing::Eq(), grid.data()));
91 #pragma GCC diagnostic pop
94 TEST(OccupancyGrid2, GlobalCoordinatesForCells) {
95 constexpr
double kResolution = 1.;
97 const auto grid = StaticOccupancyGrid<2, 3>{{
false,
true,
false,
true,
false,
true}, kResolution, origin};
99 constexpr
auto kFrame = StaticOccupancyGrid<2, 3>::Frame::kGlobal;
100 const auto coordinates = grid.coordinates_for(grid.free_cells(), kFrame) | ranges::to<std::vector>;
101 EXPECT_EQ(coordinates.size(), 3);
102 EXPECT_TRUE(coordinates[0].isApprox(Eigen::Vector2d{0.5, 1.5}));
103 EXPECT_TRUE(coordinates[1].isApprox(Eigen::Vector2d{0.5, 3.5}));
104 EXPECT_TRUE(coordinates[2].isApprox(Eigen::Vector2d{-0.5, 2.5}));