19 #include <gtest/gtest.h>
23 #include <range/v3/action/drop.hpp>
24 #include <range/v3/action/remove.hpp>
25 #include <range/v3/algorithm/equal.hpp>
26 #include <range/v3/view/indirect.hpp>
27 #include <range/v3/view/move.hpp>
28 #include <range/v3/view/reverse.hpp>
29 #include <range/v3/view/transform.hpp>
33 TEST(AssignAction, ViewToAction) {
34 auto input = std::vector{1, 2, 3};
36 ASSERT_TRUE(ranges::equal(input, std::vector{3, 2, 1}));
39 TEST(AssignAction, MoveOnlyRange) {
40 auto input = std::vector<std::unique_ptr<int>>{};
41 input.emplace_back(std::make_unique<int>(1));
42 input.emplace_back(std::make_unique<int>(2));
43 input.emplace_back(std::make_unique<int>(3));
45 ASSERT_TRUE(ranges::equal(input | ranges::views::indirect, std::vector{3, 2, 1}));
48 TEST(AssignAction, ViewToActionComposition) {
50 auto input = std::vector{1, 2, 3};
51 input |= reverse_and_assign;
52 ASSERT_TRUE(ranges::equal(input, std::vector{3, 2, 1}));
55 TEST(AssignAction, ViewToActionCall) {
56 auto input = std::vector{1, 2, 3};
58 ASSERT_TRUE(ranges::equal(input, std::vector{3, 2, 1}));
61 TEST(AssignAction, ActionComposition) {
62 auto input = std::vector{1, 2, 3};
64 ASSERT_TRUE(ranges::equal(input, std::vector{2, 3}));
67 TEST(AssignAction, ActionViewComposition) {
68 auto input = std::vector{1, 2, 3};
70 ASSERT_TRUE(ranges::equal(input, std::vector{3, 2}));
73 TEST(AssignAction, ActionViewActionComposition) {
74 auto input = std::vector{1, 2, 3};
75 input |= ranges::actions::drop(1) |
76 ranges::views::reverse |
78 ranges::actions::drop(1) |
79 ranges::views::transform([](
auto value) {
return value + 10; }) |
81 ASSERT_TRUE(ranges::equal(input, std::vector{12}));
84 TEST(AssignAction, List) {
85 auto input = std::list{1, 2, 3};
87 ASSERT_TRUE(ranges::equal(input, std::list{3, 1}));