15 #include <gtest/gtest.h>
20 #include <unordered_map>
32 bool operator()(
const Eigen::Vector2i& lhs,
const Eigen::Vector2i& rhs)
const {
33 return (lhs.x() < rhs.x()) || (lhs.y() < rhs.y());
38 std::size_t
operator()(
const Eigen::Vector2i&)
const {
return 1; }
42 testing::Types<std::unordered_map<Eigen::Vector2i, int, Hasher>, std::map<Eigen::Vector2i, int, Less>>;
53 {Eigen::Vector2i{1, 2}, 1},
54 {Eigen::Vector2i{4, 2}, 1},
55 {Eigen::Vector2i{2, 2}, 1},
56 {Eigen::Vector2i{3, 2}, 1},
60 ASSERT_EQ(grid.size(), 4);
64 const TypeParam data{};
68 ASSERT_EQ(grid.data_at(Eigen::Vector2i(2, 1)), std::nullopt);
69 ASSERT_EQ(grid.data_near(Eigen::Vector2d(5, 3)), std::nullopt);
70 ASSERT_EQ(grid.data_near(Eigen::Vector2d{5, 1}), std::nullopt);
76 ASSERT_DOUBLE_EQ(grid.resolution(), 0.5);
80 ASSERT_DOUBLE_EQ(grid.resolution(), 0.8);
86 {Eigen::Vector2i{1, 2}, 1},
87 {Eigen::Vector2i{4, 2}, 2},
88 {Eigen::Vector2i{3, 2}, 3},
89 {Eigen::Vector2i{2, 2}, 4},
94 auto data = grid.
data_near(Eigen::Vector2d{1.0, 2.0});
95 ASSERT_TRUE(data.has_value());
100 auto data = grid.
data_near(Eigen::Vector2d{4.0, 2.0});
101 ASSERT_TRUE(data.has_value());
106 auto data = grid.
data_near(Eigen::Vector2d{1.0, 2.0} * 0.5);
107 ASSERT_TRUE(data.has_value());
113 const TypeParam data{
114 {Eigen::Vector2i{1, 2}, 1}, {Eigen::Vector2i{4, 2}, 2}, {Eigen::Vector2i{3, 2}, 3}, {Eigen::Vector2i{2, 2}, 4}};
116 for (
const auto resolution : {0.1, 0.5, 1.2, 1.5}) {
118 for (
const auto& [coordinates, value] : data) {
119 const Eigen::Vector2d double_coords = coordinates.template cast<double>() * resolution;
120 ASSERT_TRUE(grid.cell_near(double_coords).isApprox(coordinates));
121 ASSERT_EQ(grid.data_near(double_coords), std::make_optional<int>(value));
122 ASSERT_EQ(grid.data_at(grid.cell_near(double_coords)), std::make_optional<int>(value));