15 #include <gmock/gmock.h>
16 #include <gtest/gtest.h>
22 #include <range/v3/range/conversion.hpp>
23 #include <range/v3/view/all.hpp>
34 using testing::ElementsAre;
36 constexpr
double kMinRange = 5.;
37 constexpr
double kMaxRange = 100.;
42 using Scalar = double;
45 : ranges_{std::move(ranges)}, angles_{std::move(angles)}, origin_{std::move(origin)} {}
47 [[nodiscard]]
const auto& origin()
const {
return origin_; }
49 [[nodiscard]]
auto ranges()
const {
return ranges_ | ranges::views::all; }
51 [[nodiscard]]
auto angles()
const {
return angles_ | ranges::views::all; }
53 [[nodiscard]]
static auto min_range() {
return kMinRange; }
55 [[nodiscard]]
static auto max_range() {
return kMaxRange; }
58 std::vector<double> ranges_;
59 std::vector<double> angles_;
63 TEST(LaserScan, InvalidValues) {
64 constexpr
auto kNan = std::numeric_limits<double>::quiet_NaN();
65 auto laser_scan = SimpleLaserScan{
66 {120., 0., 50., kNan},
69 auto polar = laser_scan.points_in_polar_coordinates() | ranges::to<std::vector>;
70 ASSERT_EQ(polar.size(), 1UL);
71 ASSERT_THAT(polar.front(), Vector2Near<double>({50., 0.3},
kTolerance));
74 TEST(LaserScan, TransformPolar) {
76 auto laser_scan = SimpleLaserScan{
78 {0., pi / 2, pi, -pi / 2},
80 auto polar = laser_scan.points_in_polar_coordinates() | ranges::to<std::vector>;
84 Vector2Near<double>({20., pi / 2},
kTolerance),
86 Vector2Near<double>({40., -pi / 2},
kTolerance)));
89 TEST(LaserScan, TransformCartesian) {
91 auto laser_scan = SimpleLaserScan{
93 {0., pi / 2, pi, -pi / 2},
95 auto polar = laser_scan.points_in_cartesian_coordinates() | ranges::to<std::vector>;
101 Vector2Near<double>({0., -40.},
kTolerance)));