+ SECTION("Iteration over no collections")
+ {
+ variable_for_loop<std::vector<int>> first;
+ variable_for_loop<std::vector<int>> last;
+ REQUIRE(first == last);
+ }
+
+ SECTION("Iteration with an empty collection")
+ {
+ variable_for_loop<std::vector<int>> last;
+ REQUIRE(variable_for_loop<std::vector<int>>{{empty_set}} == last);
+ REQUIRE(variable_for_loop<std::vector<int>>{{outer_loop1}, {empty_set}} == last);
+ REQUIRE(variable_for_loop<std::vector<int>>{{outer_loop1}, {outer_loop2}, {empty_set}} == last);
+ REQUIRE(variable_for_loop<std::vector<int>>{{outer_loop1}, {outer_loop2}, {outer_loop3}, {empty_set}} == last);
+ REQUIRE(variable_for_loop<std::vector<int>>{{outer_loop3}, {empty_set}} == last);
+ }
+
+ SECTION("Iteration with multiple empty collections")
+ {
+ variable_for_loop<std::vector<int>> last;
+ REQUIRE(variable_for_loop<std::vector<int>>{{empty_set}} == last);
+ REQUIRE(variable_for_loop<std::vector<int>>{{empty_set}, {empty_set}} == last);
+ REQUIRE(variable_for_loop<std::vector<int>>{{outer_loop1}, {outer_loop2}, {empty_set}} == last);
+ REQUIRE(variable_for_loop<std::vector<int>>{{outer_loop1}, {outer_loop2}, {empty_set}, {empty_set}} == last);
+ REQUIRE(variable_for_loop<std::vector<int>>{
+ {outer_loop1}, {outer_loop2}, {outer_loop3}, {empty_set}, {empty_set}} == last);
+ }
+ }