14
14
limitations under the License.
15
15
*/
16
16
17
- #include " merge_unique_many_view .hpp"
17
+ #include " merge_many_view .hpp"
18
18
19
19
#include < catch2/catch_test_macros.hpp>
20
20
23
23
24
24
namespace silkworm ::views {
25
25
26
- static_assert (std::ranges::input_range<MergeUniqueManyView <std::vector<std::vector<int >>>>);
27
- static_assert (std::ranges::view<MergeUniqueManyView <std::vector<std::vector<int >>>>);
26
+ static_assert (std::ranges::input_range<MergeManyView <std::vector<std::vector<int >>>>);
27
+ static_assert (std::ranges::view<MergeManyView <std::vector<std::vector<int >>>>);
28
28
29
29
template <std::ranges::input_range TRange>
30
30
std::vector<TRange> ranges (TRange r1, TRange r2) {
@@ -37,6 +37,50 @@ std::vector<TRange> ranges(TRange r1, TRange r2) {
37
37
// Skip to avoid Windows error C3889: call to object of class type 'std::ranges::_Begin::_Cpo': no matching call operator found
38
38
// Unable to reproduce: https://godbolt.org/z/3jd5brKMj
39
39
#ifndef _WIN32
40
+ TEST_CASE (" MergeManyView" ) {
41
+ CHECK (vector_from_range (merge_many (ranges (
42
+ silkworm::ranges::owning_view (std::vector<int >{1 , 2 , 3 }),
43
+ silkworm::ranges::owning_view (std::vector<int >{2 , 3 , 4 })))) ==
44
+ std::vector<int >{1 , 2 , 2 , 3 , 3 , 4 });
45
+
46
+ CHECK (vector_from_range (merge_many (ranges (
47
+ silkworm::ranges::owning_view (std::vector<int >{1 , 2 , 3 , 4 , 5 }),
48
+ silkworm::ranges::owning_view (std::vector<int >{3 , 4 , 5 , 6 , 7 })))) ==
49
+ std::vector<int >{1 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 7 });
50
+
51
+ CHECK (vector_from_range (merge_many (ranges (
52
+ silkworm::ranges::owning_view (std::vector<int >{1 , 2 , 3 , 4 , 5 , 5 , 5 }),
53
+ silkworm::ranges::owning_view (std::vector<int >{3 , 4 , 5 , 6 , 7 })))) ==
54
+ std::vector<int >{1 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 5 , 5 , 6 , 7 });
55
+
56
+ CHECK (vector_from_range (merge_many (ranges (
57
+ silkworm::ranges::owning_view (std::vector<int >{0 , 2 , 2 , 2 , 4 , 5 , 6 , 6 , 7 , 7 }),
58
+ silkworm::ranges::owning_view (std::vector<int >{0 , 0 , 1 , 2 , 3 , 5 , 5 , 6 , 8 , 9 })))) ==
59
+ std::vector<int >{0 , 0 , 0 , 1 , 2 , 2 , 2 , 2 , 3 , 4 , 5 , 5 , 5 , 6 , 6 , 6 , 7 , 7 , 8 , 9 });
60
+
61
+ using IntPredicate = std::function<bool (int )>;
62
+ IntPredicate even = [](int x) { return x % 2 == 0 ; };
63
+ IntPredicate odd = [](int x) { return x % 2 == 1 ; };
64
+ CHECK (vector_from_range (merge_many (ranges (
65
+ silkworm::ranges::owning_view (std::vector<int >{1 , 2 , 3 }) | std::views::filter (even),
66
+ silkworm::ranges::owning_view (std::vector<int >{2 , 3 , 4 }) | std::views::filter (odd)))) ==
67
+ std::vector<int >{2 , 3 });
68
+ CHECK (vector_from_range (merge_many (ranges (
69
+ silkworm::ranges::owning_view (std::vector<int >{1 , 2 , 3 }) | std::views::filter (odd),
70
+ silkworm::ranges::owning_view (std::vector<int >{2 , 3 , 4 }) | std::views::filter (even)))) ==
71
+ std::vector<int >{1 , 2 , 3 , 4 });
72
+
73
+ CHECK (vector_from_range (merge_many (ranges (std::vector<int >{}, std::vector<int >{}))).empty ());
74
+ CHECK (vector_from_range (merge_many (ranges (silkworm::ranges::owning_view (std::vector<int >{1 , 2 , 3 }), silkworm::ranges::owning_view (std::vector<int >{})))) == std::vector<int >{1 , 2 , 3 });
75
+ CHECK (vector_from_range (merge_many (ranges (silkworm::ranges::owning_view (std::vector<int >{}), silkworm::ranges::owning_view (std::vector<int >{2 , 3 , 4 })))) == std::vector<int >{2 , 3 , 4 });
76
+
77
+ using IntToVectorFunc = std::function<std::vector<int >(int )>;
78
+ CHECK (vector_from_range (merge_many (ranges (
79
+ silkworm::ranges::owning_view (std::vector<int >{1 , 2 , 3 }) | std::views::transform (IntToVectorFunc{[](int v) { return std::vector<int >{v, v, v}; }}) | std::views::join,
80
+ silkworm::ranges::owning_view (std::vector<int >{4 , 4 , 4 }) | std::views::transform (IntToVectorFunc{[](int v) { return std::vector<int >{v}; }}) | std::views::join))) ==
81
+ std::vector<int >{1 , 1 , 1 , 2 , 2 , 2 , 3 , 3 , 3 , 4 , 4 , 4 });
82
+ }
83
+
40
84
TEST_CASE (" MergeUniqueManyView" ) {
41
85
CHECK (vector_from_range (merge_unique_many (ranges (
42
86
silkworm::ranges::owning_view (std::vector<int >{1 , 2 , 3 }),
0 commit comments