Skip to content

Commit 624c496

Browse files
committed
Add missing predicate overloads
1 parent c23c7c0 commit 624c496

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

libcxx/test/benchmarks/algorithms/nonmodifying/find_end.bench.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,20 @@ int main(int argc, char** argv) {
2222
auto std_find_end = [](auto first1, auto last1, auto first2, auto last2) {
2323
return std::find_end(first1, last1, first2, last2);
2424
};
25+
auto std_find_end_pred = [](auto first1, auto last1, auto first2, auto last2) {
26+
return std::find_end(first1, last1, first2, last2, [](auto x, auto y) {
27+
benchmark::DoNotOptimize(x);
28+
benchmark::DoNotOptimize(y);
29+
return x == y;
30+
});
31+
};
32+
auto ranges_find_end_pred = [](auto first1, auto last1, auto first2, auto last2) {
33+
return std::ranges::find_end(first1, last1, first2, last2, [](auto x, auto y) {
34+
benchmark::DoNotOptimize(x);
35+
benchmark::DoNotOptimize(y);
36+
return x == y;
37+
});
38+
};
2539

2640
// Benchmark {std,ranges}::find_end where the subsequence is found
2741
// 25% into the sequence
@@ -51,12 +65,21 @@ int main(int argc, char** argv) {
5165
->Arg(8192)
5266
->Arg(1 << 20);
5367
};
68+
// {std,ranges}::find_end(it1, it1, it2, it2)
5469
bm.operator()<std::vector<int>>("std::find_end(vector<int>) (bail 25%)", std_find_end);
5570
bm.operator()<std::deque<int>>("std::find_end(deque<int>) (bail 25%)", std_find_end);
5671
bm.operator()<std::list<int>>("std::find_end(list<int>) (bail 25%)", std_find_end);
5772
bm.operator()<std::vector<int>>("rng::find_end(vector<int>) (bail 25%)", std::ranges::find_end);
5873
bm.operator()<std::deque<int>>("rng::find_end(deque<int>) (bail 25%)", std::ranges::find_end);
5974
bm.operator()<std::list<int>>("rng::find_end(list<int>) (bail 25%)", std::ranges::find_end);
75+
76+
// {std,ranges}::find_end(it1, it1, it2, it2, pred)
77+
bm.operator()<std::vector<int>>("std::find_end(vector<int>, pred) (bail 25%)", std_find_end_pred);
78+
bm.operator()<std::deque<int>>("std::find_end(deque<int>, pred) (bail 25%)", std_find_end_pred);
79+
bm.operator()<std::list<int>>("std::find_end(list<int>, pred) (bail 25%)", std_find_end_pred);
80+
bm.operator()<std::vector<int>>("rng::find_end(vector<int>, pred) (bail 25%)", ranges_find_end_pred);
81+
bm.operator()<std::deque<int>>("rng::find_end(deque<int>, pred) (bail 25%)", ranges_find_end_pred);
82+
bm.operator()<std::list<int>>("rng::find_end(list<int>, pred) (bail 25%)", ranges_find_end_pred);
6083
}
6184

6285
// Benchmark {std,ranges}::find_end where the subsequence is found
@@ -87,12 +110,21 @@ int main(int argc, char** argv) {
87110
->Arg(8192)
88111
->Arg(1 << 20);
89112
};
113+
// {std,ranges}::find_end(it1, it1, it2, it2)
90114
bm.operator()<std::vector<int>>("std::find_end(vector<int>) (bail 90%)", std_find_end);
91115
bm.operator()<std::deque<int>>("std::find_end(deque<int>) (bail 90%)", std_find_end);
92116
bm.operator()<std::list<int>>("std::find_end(list<int>) (bail 90%)", std_find_end);
93117
bm.operator()<std::vector<int>>("rng::find_end(vector<int>) (bail 90%)", std::ranges::find_end);
94118
bm.operator()<std::deque<int>>("rng::find_end(deque<int>) (bail 90%)", std::ranges::find_end);
95119
bm.operator()<std::list<int>>("rng::find_end(list<int>) (bail 90%)", std::ranges::find_end);
120+
121+
// {std,ranges}::find_end(it1, it1, it2, it2, pred)
122+
bm.operator()<std::vector<int>>("std::find_end(vector<int>, pred) (bail 90%)", std_find_end_pred);
123+
bm.operator()<std::deque<int>>("std::find_end(deque<int>, pred) (bail 90%)", std_find_end_pred);
124+
bm.operator()<std::list<int>>("std::find_end(list<int>, pred) (bail 90%)", std_find_end_pred);
125+
bm.operator()<std::vector<int>>("rng::find_end(vector<int>, pred) (bail 90%)", ranges_find_end_pred);
126+
bm.operator()<std::deque<int>>("rng::find_end(deque<int>, pred) (bail 90%)", ranges_find_end_pred);
127+
bm.operator()<std::list<int>>("rng::find_end(list<int>, pred) (bail 90%)", ranges_find_end_pred);
96128
}
97129

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

libcxx/test/benchmarks/algorithms/nonmodifying/find_first_of.bench.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,20 @@ int main(int argc, char** argv) {
2323
auto std_find_first_of = [](auto first1, auto last1, auto first2, auto last2) {
2424
return std::find_first_of(first1, last1, first2, last2);
2525
};
26+
auto std_find_first_of_pred = [](auto first1, auto last1, auto first2, auto last2) {
27+
return std::find_first_of(first1, last1, first2, last2, [](auto x, auto y) {
28+
benchmark::DoNotOptimize(x);
29+
benchmark::DoNotOptimize(y);
30+
return x == y;
31+
});
32+
};
33+
auto ranges_find_first_of_pred = [](auto first1, auto last1, auto first2, auto last2) {
34+
return std::ranges::find_first_of(first1, last1, first2, last2, [](auto x, auto y) {
35+
benchmark::DoNotOptimize(x);
36+
benchmark::DoNotOptimize(y);
37+
return x == y;
38+
});
39+
};
2640

2741
// Benchmark {std,ranges}::find_first_of where we have a hit at 25% of the haystack
2842
// and at the end of the needle. This measures how quickly we're able to search inside
@@ -55,6 +69,7 @@ int main(int argc, char** argv) {
5569
->Arg(1024)
5670
->Arg(8192);
5771
};
72+
// {std,ranges}::find_first_of(it1, it1, it2, it2)
5873
bm.operator()<std::vector<int>>("std::find_first_of(vector<int>) (25% haystack, late needle)", std_find_first_of);
5974
bm.operator()<std::deque<int>>("std::find_first_of(deque<int>) (25% haystack, late needle)", std_find_first_of);
6075
bm.operator()<std::list<int>>("std::find_first_of(list<int>) (25% haystack, late needle)", std_find_first_of);
@@ -64,6 +79,19 @@ int main(int argc, char** argv) {
6479
"rng::find_first_of(deque<int>) (25% haystack, late needle)", std::ranges::find_first_of);
6580
bm.operator()<std::list<int>>(
6681
"rng::find_first_of(list<int>) (25% haystack, late needle)", std::ranges::find_first_of);
82+
83+
// {std,ranges}::find_first_of(it1, it1, it2, it2, pred)
84+
bm.operator()<std::vector<int>>(
85+
"std::find_first_of(vector<int>, pred) (25% haystack, late needle)", std_find_first_of);
86+
bm.operator()<std::deque<int>>(
87+
"std::find_first_of(deque<int>, pred) (25% haystack, late needle)", std_find_first_of);
88+
bm.operator()<std::list<int>>("std::find_first_of(list<int>, pred) (25% haystack, late needle)", std_find_first_of);
89+
bm.operator()<std::vector<int>>(
90+
"rng::find_first_of(vector<int>, pred) (25% haystack, late needle)", std::ranges::find_first_of);
91+
bm.operator()<std::deque<int>>(
92+
"rng::find_first_of(deque<int>, pred) (25% haystack, late needle)", std::ranges::find_first_of);
93+
bm.operator()<std::list<int>>(
94+
"rng::find_first_of(list<int>, pred) (25% haystack, late needle)", std::ranges::find_first_of);
6795
}
6896

6997
// Benchmark {std,ranges}::find_first_of where we have a hit at 90% of the haystack
@@ -97,6 +125,7 @@ int main(int argc, char** argv) {
97125
->Arg(1024)
98126
->Arg(8192);
99127
};
128+
// {std,ranges}::find_first_of(it1, it1, it2, it2)
100129
bm.operator()<std::vector<int>>("std::find_first_of(vector<int>) (90% haystack, early needle)", std_find_first_of);
101130
bm.operator()<std::deque<int>>("std::find_first_of(deque<int>) (90% haystack, early needle)", std_find_first_of);
102131
bm.operator()<std::list<int>>("std::find_first_of(list<int>) (90% haystack, early needle)", std_find_first_of);
@@ -106,6 +135,20 @@ int main(int argc, char** argv) {
106135
"rng::find_first_of(deque<int>) (90% haystack, early needle)", std::ranges::find_first_of);
107136
bm.operator()<std::list<int>>(
108137
"rng::find_first_of(list<int>) (90% haystack, early needle)", std::ranges::find_first_of);
138+
139+
// {std,ranges}::find_first_of(it1, it1, it2, it2, pred)
140+
bm.operator()<std::vector<int>>(
141+
"std::find_first_of(vector<int>, pred) (90% haystack, early needle)", std_find_first_of_pred);
142+
bm.operator()<std::deque<int>>(
143+
"std::find_first_of(deque<int>, pred) (90% haystack, early needle)", std_find_first_of_pred);
144+
bm.operator()<std::list<int>>(
145+
"std::find_first_of(list<int>, pred) (90% haystack, early needle)", std_find_first_of_pred);
146+
bm.operator()<std::vector<int>>(
147+
"rng::find_first_of(vector<int>, pred) (90% haystack, early needle)", ranges_find_first_of_pred);
148+
bm.operator()<std::deque<int>>(
149+
"rng::find_first_of(deque<int>, pred) (90% haystack, early needle)", ranges_find_first_of_pred);
150+
bm.operator()<std::list<int>>(
151+
"rng::find_first_of(list<int>, pred) (90% haystack, early needle)", ranges_find_first_of_pred);
109152
}
110153

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

0 commit comments

Comments
 (0)