#include "helpers.hpp" #include #include #include #include #include "catch.hpp" using iter::count; TEST_CASE("count: watch for 10 elements", "[count]") { std::vector v{}; for (auto i : count()) { v.push_back(i); if (i == 9) break; } const std::vector vc{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; REQUIRE(v == vc); } TEST_CASE("count: start at 10", "[count]") { std::vector v{}; for (auto i : count(10)) { v.push_back(i); if (i == 14) break; } const std::vector vc{10, 11, 12, 13, 14}; REQUIRE(v == vc); } TEST_CASE("count: with step", "[count]") { std::vector v{}; for (auto i : count(2, -1)) { v.push_back(i); if (i == -3) break; } const std::vector vc{2, 1, 0, -1, -2, -3}; REQUIRE(v == vc); } TEST_CASE("count: with step > 1", "[count]") { std::vector v{}; for (auto i : count(10, 2)) { v.push_back(i); if (i == 16) break; } const std::vector vc{10, 12, 14, 16}; REQUIRE(v == vc); } TEST_CASE("count: can bo constexpr", "[count]") { constexpr auto c = count(); constexpr auto c2 = count(5); (void)c2; constexpr auto c3 = count(5, 2); (void)c3; constexpr auto it = c.begin(); constexpr auto i = *it; static_assert(i == 0, "count begin not correct value"); } TEST_CASE("count: iterator meets requirements", "[count]") { auto c = count(); REQUIRE(itertest::IsIterator::value); }