Skip to content

Commit b21656a

Browse files
committed
Add a few benchmarks on forward_list
1 parent bd58f5b commit b21656a

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
// UNSUPPORTED: c++03, c++11, c++14, c++17
1010

1111
#include <algorithm>
12+
#include <cassert>
1213
#include <cstddef>
1314
#include <deque>
15+
#include <forward_list>
1416
#include <list>
1517
#include <string>
1618
#include <vector>
@@ -39,7 +41,8 @@ int main(int argc, char** argv) {
3941
ValueType y = random_different_from({x});
4042
Container c1(size, x);
4143
Container c2(size, x);
42-
c2.back() = y;
44+
assert(size != 0);
45+
*std::next(c2.begin(), size - 1) = y; // set last element to y
4346

4447
for ([[maybe_unused]] auto _ : st) {
4548
benchmark::DoNotOptimize(c1);
@@ -57,10 +60,14 @@ int main(int argc, char** argv) {
5760
bm.operator()<std::vector<int>>("rng::ends_with(vector<int>) (mismatch at end)", std::ranges::ends_with);
5861
bm.operator()<std::deque<int>>("rng::ends_with(deque<int>) (mismatch at end)", std::ranges::ends_with);
5962
bm.operator()<std::list<int>>("rng::ends_with(list<int>) (mismatch at end)", std::ranges::ends_with);
63+
bm.operator()<std::forward_list<int>>(
64+
"rng::ends_with(forward_list<int>) (mismatch at end)", std::ranges::ends_with);
6065

6166
bm.operator()<std::vector<int>>("rng::ends_with(vector<int>, pred) (mismatch at end)", ranges_ends_with_pred);
6267
bm.operator()<std::deque<int>>("rng::ends_with(deque<int>, pred) (mismatch at end)", ranges_ends_with_pred);
6368
bm.operator()<std::list<int>>("rng::ends_with(list<int>, pred) (mismatch at end)", ranges_ends_with_pred);
69+
bm.operator()<std::forward_list<int>>(
70+
"rng::ends_with(forward_list<int>, pred) (mismatch at end)", ranges_ends_with_pred);
6471
}
6572

6673
// Benchmark ranges::ends_with where we find the mismatching element at the very beginning.
@@ -75,6 +82,7 @@ int main(int argc, char** argv) {
7582
ValueType y = random_different_from({x});
7683
Container c1(size, x);
7784
Container c2(size, x);
85+
assert(size != 0);
7886
c2.front() = y;
7987

8088
for ([[maybe_unused]] auto _ : st) {
@@ -93,10 +101,14 @@ int main(int argc, char** argv) {
93101
bm.operator()<std::vector<int>>("rng::ends_with(vector<int>) (mismatch at start)", std::ranges::ends_with);
94102
bm.operator()<std::deque<int>>("rng::ends_with(deque<int>) (mismatch at start)", std::ranges::ends_with);
95103
bm.operator()<std::list<int>>("rng::ends_with(list<int>) (mismatch at start)", std::ranges::ends_with);
104+
bm.operator()<std::forward_list<int>>(
105+
"rng::ends_with(forward_list<int>) (mismatch at start)", std::ranges::ends_with);
96106

97107
bm.operator()<std::vector<int>>("rng::ends_with(vector<int>, pred) (mismatch at start)", ranges_ends_with_pred);
98108
bm.operator()<std::deque<int>>("rng::ends_with(deque<int>, pred) (mismatch at start)", ranges_ends_with_pred);
99109
bm.operator()<std::list<int>>("rng::ends_with(list<int>, pred) (mismatch at start)", ranges_ends_with_pred);
110+
bm.operator()<std::forward_list<int>>(
111+
"rng::ends_with(forward_list<int>, pred) (mismatch at start)", ranges_ends_with_pred);
100112
}
101113

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

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <algorithm>
1212
#include <cstddef>
1313
#include <deque>
14+
#include <forward_list>
1415
#include <list>
1516
#include <string>
1617
#include <vector>
@@ -52,7 +53,7 @@ int main(int argc, char** argv) {
5253
Container subrange(size / 10, y); // subrange of length 10% of the full range
5354

5455
// put the element we're searching for at 25% of the sequence
55-
std::ranges::copy(subrange, std::next(c.begin(), c.size() / 4));
56+
std::ranges::copy(subrange, std::next(c.begin(), size / 4));
5657

5758
for ([[maybe_unused]] auto _ : st) {
5859
benchmark::DoNotOptimize(c);
@@ -70,17 +71,21 @@ int main(int argc, char** argv) {
7071
bm.operator()<std::vector<int>>("std::find_end(vector<int>) (bail 25%)", std_find_end);
7172
bm.operator()<std::deque<int>>("std::find_end(deque<int>) (bail 25%)", std_find_end);
7273
bm.operator()<std::list<int>>("std::find_end(list<int>) (bail 25%)", std_find_end);
74+
bm.operator()<std::forward_list<int>>("std::find_end(forward_list<int>) (bail 25%)", std_find_end);
7375
bm.operator()<std::vector<int>>("rng::find_end(vector<int>) (bail 25%)", std::ranges::find_end);
7476
bm.operator()<std::deque<int>>("rng::find_end(deque<int>) (bail 25%)", std::ranges::find_end);
7577
bm.operator()<std::list<int>>("rng::find_end(list<int>) (bail 25%)", std::ranges::find_end);
78+
bm.operator()<std::forward_list<int>>("rng::find_end(forward_list<int>) (bail 25%)", std::ranges::find_end);
7679

7780
// {std,ranges}::find_end(it1, it1, it2, it2, pred)
7881
bm.operator()<std::vector<int>>("std::find_end(vector<int>, pred) (bail 25%)", std_find_end_pred);
7982
bm.operator()<std::deque<int>>("std::find_end(deque<int>, pred) (bail 25%)", std_find_end_pred);
8083
bm.operator()<std::list<int>>("std::find_end(list<int>, pred) (bail 25%)", std_find_end_pred);
84+
bm.operator()<std::forward_list<int>>("std::find_end(forward_list<int>, pred) (bail 25%)", std_find_end_pred);
8185
bm.operator()<std::vector<int>>("rng::find_end(vector<int>, pred) (bail 25%)", ranges_find_end_pred);
8286
bm.operator()<std::deque<int>>("rng::find_end(deque<int>, pred) (bail 25%)", ranges_find_end_pred);
8387
bm.operator()<std::list<int>>("rng::find_end(list<int>, pred) (bail 25%)", ranges_find_end_pred);
88+
bm.operator()<std::forward_list<int>>("rng::find_end(forward_list<int>, pred) (bail 25%)", ranges_find_end_pred);
8489
}
8590

8691
// Benchmark {std,ranges}::find_end where the subsequence is found
@@ -98,7 +103,7 @@ int main(int argc, char** argv) {
98103
Container subrange(size / 10, y); // subrange of length 10% of the full range
99104

100105
// put the element we're searching for at 90% of the sequence
101-
std::ranges::copy(subrange, std::next(c.begin(), 9 * (c.size() / 10)));
106+
std::ranges::copy(subrange, std::next(c.begin(), (9 * size) / 10));
102107

103108
for ([[maybe_unused]] auto _ : st) {
104109
benchmark::DoNotOptimize(c);
@@ -116,17 +121,21 @@ int main(int argc, char** argv) {
116121
bm.operator()<std::vector<int>>("std::find_end(vector<int>) (bail 90%)", std_find_end);
117122
bm.operator()<std::deque<int>>("std::find_end(deque<int>) (bail 90%)", std_find_end);
118123
bm.operator()<std::list<int>>("std::find_end(list<int>) (bail 90%)", std_find_end);
124+
bm.operator()<std::forward_list<int>>("std::find_end(forward_list<int>) (bail 90%)", std_find_end);
119125
bm.operator()<std::vector<int>>("rng::find_end(vector<int>) (bail 90%)", std::ranges::find_end);
120126
bm.operator()<std::deque<int>>("rng::find_end(deque<int>) (bail 90%)", std::ranges::find_end);
121127
bm.operator()<std::list<int>>("rng::find_end(list<int>) (bail 90%)", std::ranges::find_end);
128+
bm.operator()<std::forward_list<int>>("rng::find_end(forward_list<int>) (bail 90%)", std::ranges::find_end);
122129

123130
// {std,ranges}::find_end(it1, it1, it2, it2, pred)
124131
bm.operator()<std::vector<int>>("std::find_end(vector<int>, pred) (bail 90%)", std_find_end_pred);
125132
bm.operator()<std::deque<int>>("std::find_end(deque<int>, pred) (bail 90%)", std_find_end_pred);
126133
bm.operator()<std::list<int>>("std::find_end(list<int>, pred) (bail 90%)", std_find_end_pred);
134+
bm.operator()<std::forward_list<int>>("std::find_end(forward_list<int>, pred) (bail 90%)", std_find_end_pred);
127135
bm.operator()<std::vector<int>>("rng::find_end(vector<int>, pred) (bail 90%)", ranges_find_end_pred);
128136
bm.operator()<std::deque<int>>("rng::find_end(deque<int>, pred) (bail 90%)", ranges_find_end_pred);
129137
bm.operator()<std::list<int>>("rng::find_end(list<int>, pred) (bail 90%)", ranges_find_end_pred);
138+
bm.operator()<std::forward_list<int>>("rng::find_end(forward_list<int>, pred) (bail 90%)", ranges_find_end_pred);
130139
}
131140

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

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <algorithm>
1212
#include <cstddef>
1313
#include <deque>
14+
#include <forward_list>
1415
#include <list>
1516
#include <string>
1617
#include <vector>
@@ -67,18 +68,22 @@ int main(int argc, char** argv) {
6768
bm.operator()<std::vector<int>>("rng::find_last(vector<int>) (bail 25%)", std::ranges::find_last);
6869
bm.operator()<std::deque<int>>("rng::find_last(deque<int>) (bail 25%)", std::ranges::find_last);
6970
bm.operator()<std::list<int>>("rng::find_last(list<int>) (bail 25%)", std::ranges::find_last);
71+
bm.operator()<std::forward_list<int>>("rng::find_last(forward_list<int>) (bail 25%)", std::ranges::find_last);
7072

7173
// find_last_if
7274
bm.operator()<std::vector<char>>("rng::find_last_if(vector<char>) (bail 25%)", ranges_find_last_if);
7375
bm.operator()<std::vector<int>>("rng::find_last_if(vector<int>) (bail 25%)", ranges_find_last_if);
7476
bm.operator()<std::deque<int>>("rng::find_last_if(deque<int>) (bail 25%)", ranges_find_last_if);
7577
bm.operator()<std::list<int>>("rng::find_last_if(list<int>) (bail 25%)", ranges_find_last_if);
78+
bm.operator()<std::forward_list<int>>("rng::find_last_if(forward_list<int>) (bail 25%)", ranges_find_last_if);
7679

7780
// find_last_if_not
7881
bm.operator()<std::vector<char>>("rng::find_last_if_not(vector<char>) (bail 25%)", ranges_find_last_if_not);
7982
bm.operator()<std::vector<int>>("rng::find_last_if_not(vector<int>) (bail 25%)", ranges_find_last_if_not);
8083
bm.operator()<std::deque<int>>("rng::find_last_if_not(deque<int>) (bail 25%)", ranges_find_last_if_not);
8184
bm.operator()<std::list<int>>("rng::find_last_if_not(list<int>) (bail 25%)", ranges_find_last_if_not);
85+
bm.operator()<std::forward_list<int>>(
86+
"rng::find_last_if_not(forward_list<int>) (bail 25%)", ranges_find_last_if_not);
8287
}
8388

8489
// Benchmark ranges::{find_last,find_last_if,find_last_if_not} where the last element
@@ -115,18 +120,22 @@ int main(int argc, char** argv) {
115120
bm.operator()<std::vector<int>>("rng::find_last(vector<int>) (bail 90%)", std::ranges::find_last);
116121
bm.operator()<std::deque<int>>("rng::find_last(deque<int>) (bail 90%)", std::ranges::find_last);
117122
bm.operator()<std::list<int>>("rng::find_last(list<int>) (bail 90%)", std::ranges::find_last);
123+
bm.operator()<std::forward_list<int>>("rng::find_last(forward_list<int>) (bail 90%)", std::ranges::find_last);
118124

119125
// find_last_if
120126
bm.operator()<std::vector<char>>("rng::find_last_if(vector<char>) (bail 90%)", ranges_find_last_if);
121127
bm.operator()<std::vector<int>>("rng::find_last_if(vector<int>) (bail 90%)", ranges_find_last_if);
122128
bm.operator()<std::deque<int>>("rng::find_last_if(deque<int>) (bail 90%)", ranges_find_last_if);
123129
bm.operator()<std::list<int>>("rng::find_last_if(list<int>) (bail 90%)", ranges_find_last_if);
130+
bm.operator()<std::forward_list<int>>("rng::find_last_if(forward_list<int>) (bail 90%)", ranges_find_last_if);
124131

125132
// find_last_if_not
126133
bm.operator()<std::vector<char>>("rng::find_last_if_not(vector<char>) (bail 90%)", ranges_find_last_if_not);
127134
bm.operator()<std::vector<int>>("rng::find_last_if_not(vector<int>) (bail 90%)", ranges_find_last_if_not);
128135
bm.operator()<std::deque<int>>("rng::find_last_if_not(deque<int>) (bail 90%)", ranges_find_last_if_not);
129136
bm.operator()<std::list<int>>("rng::find_last_if_not(list<int>) (bail 90%)", ranges_find_last_if_not);
137+
bm.operator()<std::forward_list<int>>(
138+
"rng::find_last_if_not(forward_list<int>) (bail 90%)", ranges_find_last_if_not);
130139
}
131140

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

0 commit comments

Comments
 (0)