Skip to content

Commit 91bf6bd

Browse files
committed
Merge predicated version of the algorithms
1 parent ffc5a7a commit 91bf6bd

File tree

10 files changed

+163
-636
lines changed

10 files changed

+163
-636
lines changed

libcxx/test/benchmarks/algorithms/modifying/remove.bench.cpp

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,21 @@
2020
#include "../../GenerateInput.h"
2121

2222
int main(int argc, char** argv) {
23-
auto std_remove = [](auto first, auto last, auto const& value) { return std::remove(first, last, value); };
23+
auto std_remove = [](auto first, auto last, auto const& value) { return std::remove(first, last, value); };
24+
auto std_remove_if = [](auto first, auto last, auto const& value) {
25+
return std::remove_if(first, last, [&](auto element) {
26+
benchmark::DoNotOptimize(element);
27+
return element == value;
28+
});
29+
};
30+
auto ranges_remove_if = [](auto first, auto last, auto const& value) {
31+
return std::ranges::remove_if(first, last, [&](auto element) {
32+
benchmark::DoNotOptimize(element);
33+
return element == value;
34+
});
35+
};
2436

25-
// Benchmark {std,ranges}::remove on a sequence of the form xxxxxxxxxxyyyyyyyyyy
37+
// Benchmark {std,ranges}::{remove,remove_if} on a sequence of the form xxxxxxxxxxyyyyyyyyyy
2638
// where we remove the prefix of x's from the sequence.
2739
//
2840
// We perform this benchmark in a batch because we need to restore the
@@ -64,12 +76,21 @@ int main(int argc, char** argv) {
6476
->Arg(1024)
6577
->Arg(8192);
6678
};
79+
// {std,ranges}::remove
6780
bm.operator()<std::vector<int>>("std::remove(vector<int>) (prefix)", std_remove);
6881
bm.operator()<std::deque<int>>("std::remove(deque<int>) (prefix)", std_remove);
6982
bm.operator()<std::list<int>>("std::remove(list<int>) (prefix)", std_remove);
7083
bm.operator()<std::vector<int>>("rng::remove(vector<int>) (prefix)", std::ranges::remove);
7184
bm.operator()<std::deque<int>>("rng::remove(deque<int>) (prefix)", std::ranges::remove);
7285
bm.operator()<std::list<int>>("rng::remove(list<int>) (prefix)", std::ranges::remove);
86+
87+
// {std,ranges}::remove_if
88+
bm.operator()<std::vector<int>>("std::remove_if(vector<int>) (prefix)", std_remove_if);
89+
bm.operator()<std::deque<int>>("std::remove_if(deque<int>) (prefix)", std_remove_if);
90+
bm.operator()<std::list<int>>("std::remove_if(list<int>) (prefix)", std_remove_if);
91+
bm.operator()<std::vector<int>>("rng::remove_if(vector<int>) (prefix)", ranges_remove_if);
92+
bm.operator()<std::deque<int>>("rng::remove_if(deque<int>) (prefix)", ranges_remove_if);
93+
bm.operator()<std::list<int>>("rng::remove_if(list<int>) (prefix)", ranges_remove_if);
7394
}
7495

7596
// Benchmark {std,ranges}::remove on a sequence of the form xyxyxyxyxyxyxyxyxyxy
@@ -117,12 +138,21 @@ int main(int argc, char** argv) {
117138
->Arg(1024)
118139
->Arg(8192);
119140
};
141+
// {std,ranges}::remove
120142
bm.operator()<std::vector<int>>("std::remove(vector<int>) (sprinkled)", std_remove);
121143
bm.operator()<std::deque<int>>("std::remove(deque<int>) (sprinkled)", std_remove);
122144
bm.operator()<std::list<int>>("std::remove(list<int>) (sprinkled)", std_remove);
123145
bm.operator()<std::vector<int>>("rng::remove(vector<int>) (sprinkled)", std::ranges::remove);
124146
bm.operator()<std::deque<int>>("rng::remove(deque<int>) (sprinkled)", std::ranges::remove);
125147
bm.operator()<std::list<int>>("rng::remove(list<int>) (sprinkled)", std::ranges::remove);
148+
149+
// {std,ranges}::remove_if
150+
bm.operator()<std::vector<int>>("std::remove_if(vector<int>) (sprinkled)", std_remove_if);
151+
bm.operator()<std::deque<int>>("std::remove_if(deque<int>) (sprinkled)", std_remove_if);
152+
bm.operator()<std::list<int>>("std::remove_if(list<int>) (sprinkled)", std_remove_if);
153+
bm.operator()<std::vector<int>>("rng::remove_if(vector<int>) (sprinkled)", ranges_remove_if);
154+
bm.operator()<std::deque<int>>("rng::remove_if(deque<int>) (sprinkled)", ranges_remove_if);
155+
bm.operator()<std::list<int>>("rng::remove_if(list<int>) (sprinkled)", ranges_remove_if);
126156
}
127157

128158
benchmark::Initialize(&argc, argv);

libcxx/test/benchmarks/algorithms/modifying/remove_copy.bench.cpp

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,20 @@ int main(int argc, char** argv) {
2323
auto std_remove_copy = [](auto first, auto last, auto out, auto const& value) {
2424
return std::remove_copy(first, last, out, value);
2525
};
26+
auto std_remove_copy_if = [](auto first, auto last, auto out, auto const& value) {
27+
return std::remove_copy_if(first, last, out, [&](auto element) {
28+
benchmark::DoNotOptimize(element);
29+
return element == value;
30+
});
31+
};
32+
auto ranges_remove_copy_if = [](auto first, auto last, auto out, auto const& value) {
33+
return std::ranges::remove_copy_if(first, last, out, [&](auto element) {
34+
benchmark::DoNotOptimize(element);
35+
return element == value;
36+
});
37+
};
2638

27-
// Benchmark {std,ranges}::remove_copy on a sequence of the form xxxxxxxxxxyyyyyyyyyy
39+
// Benchmark {std,ranges}::{remove_copy,remove_copy_if} on a sequence of the form xxxxxxxxxxyyyyyyyyyy
2840
// where we remove the prefix of x's from the sequence.
2941
{
3042
auto bm = []<class Container>(std::string name, auto remove_copy) {
@@ -53,15 +65,24 @@ int main(int argc, char** argv) {
5365
->Arg(1024)
5466
->Arg(8192);
5567
};
68+
// {std,ranges}::remove_copy
5669
bm.operator()<std::vector<int>>("std::remove_copy(vector<int>) (prefix)", std_remove_copy);
5770
bm.operator()<std::deque<int>>("std::remove_copy(deque<int>) (prefix)", std_remove_copy);
5871
bm.operator()<std::list<int>>("std::remove_copy(list<int>) (prefix)", std_remove_copy);
5972
bm.operator()<std::vector<int>>("rng::remove_copy(vector<int>) (prefix)", std::ranges::remove_copy);
6073
bm.operator()<std::deque<int>>("rng::remove_copy(deque<int>) (prefix)", std::ranges::remove_copy);
6174
bm.operator()<std::list<int>>("rng::remove_copy(list<int>) (prefix)", std::ranges::remove_copy);
75+
76+
// {std,ranges}::remove_copy_if
77+
bm.operator()<std::vector<int>>("std::remove_copy_if(vector<int>) (prefix)", std_remove_copy_if);
78+
bm.operator()<std::deque<int>>("std::remove_copy_if(deque<int>) (prefix)", std_remove_copy_if);
79+
bm.operator()<std::list<int>>("std::remove_copy_if(list<int>) (prefix)", std_remove_copy_if);
80+
bm.operator()<std::vector<int>>("rng::remove_copy_if(vector<int>) (prefix)", ranges_remove_copy_if);
81+
bm.operator()<std::deque<int>>("rng::remove_copy_if(deque<int>) (prefix)", ranges_remove_copy_if);
82+
bm.operator()<std::list<int>>("rng::remove_copy_if(list<int>) (prefix)", ranges_remove_copy_if);
6283
}
6384

64-
// Benchmark {std,ranges}::remove_copy on a sequence of the form xyxyxyxyxyxyxyxyxyxy
85+
// Benchmark {std,ranges}::{remove_copy,remove_copy_if} on a sequence of the form xyxyxyxyxyxyxyxyxyxy
6586
// where we remove the x's from the sequence.
6687
{
6788
auto bm = []<class Container>(std::string name, auto remove_copy) {
@@ -91,12 +112,21 @@ int main(int argc, char** argv) {
91112
->Arg(1024)
92113
->Arg(8192);
93114
};
115+
// {std,ranges}::remove_copy
94116
bm.operator()<std::vector<int>>("std::remove_copy(vector<int>) (sprinkled)", std_remove_copy);
95117
bm.operator()<std::deque<int>>("std::remove_copy(deque<int>) (sprinkled)", std_remove_copy);
96118
bm.operator()<std::list<int>>("std::remove_copy(list<int>) (sprinkled)", std_remove_copy);
97119
bm.operator()<std::vector<int>>("rng::remove_copy(vector<int>) (sprinkled)", std::ranges::remove_copy);
98120
bm.operator()<std::deque<int>>("rng::remove_copy(deque<int>) (sprinkled)", std::ranges::remove_copy);
99121
bm.operator()<std::list<int>>("rng::remove_copy(list<int>) (sprinkled)", std::ranges::remove_copy);
122+
123+
// {std,ranges}::remove_copy_if
124+
bm.operator()<std::vector<int>>("std::remove_copy_if(vector<int>) (sprinkled)", std_remove_copy_if);
125+
bm.operator()<std::deque<int>>("std::remove_copy_if(deque<int>) (sprinkled)", std_remove_copy_if);
126+
bm.operator()<std::list<int>>("std::remove_copy_if(list<int>) (sprinkled)", std_remove_copy_if);
127+
bm.operator()<std::vector<int>>("rng::remove_copy_if(vector<int>) (sprinkled)", ranges_remove_copy_if);
128+
bm.operator()<std::deque<int>>("rng::remove_copy_if(deque<int>) (sprinkled)", ranges_remove_copy_if);
129+
bm.operator()<std::list<int>>("rng::remove_copy_if(list<int>) (sprinkled)", ranges_remove_copy_if);
100130
}
101131

102132
benchmark::Initialize(&argc, argv);

libcxx/test/benchmarks/algorithms/modifying/remove_copy_if.bench.cpp

Lines changed: 0 additions & 112 deletions
This file was deleted.

libcxx/test/benchmarks/algorithms/modifying/remove_if.bench.cpp

Lines changed: 0 additions & 140 deletions
This file was deleted.

0 commit comments

Comments
 (0)