15 #include <gtest/gtest.h>
21 #include <range/v3/range/conversion.hpp>
27 TEST(Bresenham, MultiPassGuarantee) {
32 const auto line = algorithm({0, 0}, {5, 5});
33 for (
auto it1 = line.begin(), it2 = line.begin(); it1 != line.end(); ++it1, ++it2) {
39 auto it3 = line.begin();
42 const auto expected_value = *it3;
44 ASSERT_EQ(expected_value, *it3);
47 TEST(Bresenham, Standard) {
51 const auto expected_trace = std::vector<Eigen::Vector2i>{{0, 0}};
52 const auto trace = algorithm({0, 0}, {0, 0}) | ranges::to<std::vector>;
53 EXPECT_EQ(trace, expected_trace);
62 const auto expected_trace = std::vector<Eigen::Vector2i>{{0, 0}, {1, 1}};
63 const auto trace = algorithm({0, 0}, {1, 1}) | ranges::to<std::vector>;
64 EXPECT_EQ(trace, expected_trace);
73 const auto expected_trace = std::vector<Eigen::Vector2i>{{1, 1}, {0, 0}};
74 const auto trace = algorithm({1, 1}, {0, 0}) | ranges::to<std::vector>;
75 EXPECT_EQ(trace, expected_trace);
84 const auto expected_trace = std::vector<Eigen::Vector2i>{{0, 0}, {1, 0}, {2, 1}};
85 const auto trace = algorithm({0, 0}, {2, 1}) | ranges::to<std::vector>;
86 EXPECT_EQ(trace, expected_trace);
95 const auto expected_trace = std::vector<Eigen::Vector2i>{{2, 1}, {1, 1}, {0, 0}};
96 const auto trace = algorithm({2, 1}, {0, 0}) | ranges::to<std::vector>;
97 EXPECT_EQ(trace, expected_trace);
108 const auto expected_trace = std::vector<Eigen::Vector2i>{{0, 2}, {0, 1}, {0, 0}};
109 const auto trace = algorithm({0, 2}, {0, 0}) | ranges::to<std::vector>;
110 EXPECT_EQ(trace, expected_trace);
121 const auto expected_trace = std::vector<Eigen::Vector2i>{{3, 2}, {2, 1}, {1, 1}, {0, 0}};
122 const auto trace = algorithm({3, 2}, {0, 0}) | ranges::to<std::vector>;
123 EXPECT_EQ(trace, expected_trace);
131 const auto expected_trace = std::vector<Eigen::Vector2i>{{0, 0}};
132 const auto trace = algorithm({0, 0}, {0, 0}) | ranges::to<std::vector>;
133 EXPECT_EQ(trace, expected_trace);
142 const auto expected_trace = std::vector<Eigen::Vector2i>{{0, 0}, {1, 0}, {0, 1}, {1, 1}};
143 const auto trace = algorithm({0, 0}, {1, 1}) | ranges::to<std::vector>;
144 EXPECT_EQ(trace, expected_trace);
153 const auto expected_trace = std::vector<Eigen::Vector2i>{{1, 1}, {0, 1}, {1, 0}, {0, 0}};
154 const auto trace = algorithm({1, 1}, {0, 0}) | ranges::to<std::vector>;
155 EXPECT_EQ(trace, expected_trace);
164 const auto expected_trace = std::vector<Eigen::Vector2i>{{0, 0}, {1, 0}, {1, 1}, {2, 1}};
165 const auto trace = algorithm({0, 0}, {2, 1}) | ranges::to<std::vector>;
166 EXPECT_EQ(trace, expected_trace);
175 const auto expected_trace = std::vector<Eigen::Vector2i>{{2, 1}, {1, 1}, {1, 0}, {0, 0}};
176 const auto trace = algorithm({2, 1}, {0, 0}) | ranges::to<std::vector>;
177 EXPECT_EQ(trace, expected_trace);
188 const auto expected_trace = std::vector<Eigen::Vector2i>{{0, 2}, {0, 1}, {0, 0}};
189 const auto trace = algorithm({0, 2}, {0, 0}) | ranges::to<std::vector>;
190 EXPECT_EQ(trace, expected_trace);
201 const auto expected_trace = std::vector<Eigen::Vector2i>{{3, 2}, {2, 2}, {2, 1}, {1, 1}, {1, 0}, {0, 0}};
202 const auto trace = algorithm({3, 2}, {0, 0}) | ranges::to<std::vector>;
203 EXPECT_EQ(trace, expected_trace);