1*ff3989e6SKonstantin Varlamov //===----------------------------------------------------------------------===//
2*ff3989e6SKonstantin Varlamov //
3*ff3989e6SKonstantin Varlamov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*ff3989e6SKonstantin Varlamov // See https://llvm.org/LICENSE.txt for license information.
5*ff3989e6SKonstantin Varlamov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*ff3989e6SKonstantin Varlamov //
7*ff3989e6SKonstantin Varlamov //===----------------------------------------------------------------------===//
8*ff3989e6SKonstantin Varlamov 
9*ff3989e6SKonstantin Varlamov #include <algorithm>
10*ff3989e6SKonstantin Varlamov 
11*ff3989e6SKonstantin Varlamov #include "common.h"
12*ff3989e6SKonstantin Varlamov 
13*ff3989e6SKonstantin Varlamov namespace {
14*ff3989e6SKonstantin Varlamov template <class ValueType, class Order>
15*ff3989e6SKonstantin Varlamov struct Sort {
16*ff3989e6SKonstantin Varlamov   size_t Quantity;
17*ff3989e6SKonstantin Varlamov 
run__anon4a6d66b40111::Sort18*ff3989e6SKonstantin Varlamov   void run(benchmark::State& state) const {
19*ff3989e6SKonstantin Varlamov     runOpOnCopies<ValueType>(
20*ff3989e6SKonstantin Varlamov         state, Quantity, Order(), BatchSize::CountElements,
21*ff3989e6SKonstantin Varlamov         [](auto& Copy) { std::ranges::sort(Copy); });
22*ff3989e6SKonstantin Varlamov   }
23*ff3989e6SKonstantin Varlamov 
skip__anon4a6d66b40111::Sort24*ff3989e6SKonstantin Varlamov   bool skip() const { return Order() == ::Order::Heap; }
25*ff3989e6SKonstantin Varlamov 
name__anon4a6d66b40111::Sort26*ff3989e6SKonstantin Varlamov   std::string name() const {
27*ff3989e6SKonstantin Varlamov     return "BM_RangesSort" + ValueType::name() + Order::name() + "_" +
28*ff3989e6SKonstantin Varlamov            std::to_string(Quantity);
29*ff3989e6SKonstantin Varlamov   }
30*ff3989e6SKonstantin Varlamov };
31*ff3989e6SKonstantin Varlamov } // namespace
32*ff3989e6SKonstantin Varlamov 
main(int argc,char ** argv)33*ff3989e6SKonstantin Varlamov int main(int argc, char** argv) {
34*ff3989e6SKonstantin Varlamov   benchmark::Initialize(&argc, argv);
35*ff3989e6SKonstantin Varlamov   if (benchmark::ReportUnrecognizedArguments(argc, argv))
36*ff3989e6SKonstantin Varlamov     return 1;
37*ff3989e6SKonstantin Varlamov   makeCartesianProductBenchmark<Sort, AllValueTypes, AllOrders>(Quantities);
38*ff3989e6SKonstantin Varlamov   benchmark::RunSpecifiedBenchmarks();
39*ff3989e6SKonstantin Varlamov }
40