Skip to content

Commit c7c7eab

Browse files
authored
[libc++] Add a benchmark for std::reverse (llvm#125262)
1 parent 67696a1 commit c7c7eab

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
10+
11+
#include <algorithm>
12+
#include <iterator>
13+
#include <string>
14+
#include <vector>
15+
16+
#include <benchmark/benchmark.h>
17+
#include "../GenerateInput.h"
18+
19+
template <class T>
20+
static void bm_reverse(benchmark::State& state) {
21+
std::size_t const n = state.range();
22+
std::vector<T> vec;
23+
std::generate_n(std::back_inserter(vec), n, [] { return Generate<T>::cheap(); });
24+
for (auto _ : state) {
25+
std::reverse(vec.begin(), vec.end());
26+
benchmark::DoNotOptimize(vec);
27+
}
28+
}
29+
BENCHMARK(bm_reverse<int>)->Name("std::reverse(vector<int>)")->DenseRange(1, 8)->Range(16, 1 << 20);
30+
BENCHMARK(bm_reverse<std::string>)->Name("std::reverse(vector<string>)")->DenseRange(1, 8)->Range(16, 1 << 20);
31+
32+
template <class T>
33+
static void bm_ranges_reverse(benchmark::State& state) {
34+
std::size_t const n = state.range();
35+
std::vector<T> vec;
36+
std::generate_n(std::back_inserter(vec), n, [] { return Generate<T>::cheap(); });
37+
for (auto _ : state) {
38+
std::ranges::reverse(vec.begin(), vec.end());
39+
benchmark::DoNotOptimize(vec);
40+
}
41+
}
42+
BENCHMARK(bm_ranges_reverse<int>)->Name("ranges::reverse(vector<int>)")->DenseRange(1, 8)->Range(16, 1 << 20);
43+
BENCHMARK(bm_ranges_reverse<std::string>)
44+
->Name("ranges::reverse(vector<string>)")
45+
->DenseRange(1, 8)
46+
->Range(16, 1 << 20);
47+
48+
BENCHMARK_MAIN();

0 commit comments

Comments
 (0)