79 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: c++03, c++11, c++14, c++1710 11#include <algorithm>12#include <cassert>13 14#include <benchmark/benchmark.h>15 16void run_sizes(auto benchmark) {17 benchmark->Arg(1)18 ->Arg(2)19 ->Arg(3)20 ->Arg(4)21 ->Arg(5)22 ->Arg(6)23 ->Arg(7)24 ->Arg(8)25 ->Arg(9)26 ->Arg(10)27 ->Arg(11)28 ->Arg(12)29 ->Arg(13)30 ->Arg(14)31 ->Arg(15)32 ->Arg(16)33 ->Arg(17)34 ->Arg(18)35 ->Arg(19)36 ->Arg(20)37 ->Arg(21)38 ->Arg(22)39 ->Arg(23)40 ->Arg(24)41 ->Arg(25)42 ->Arg(26)43 ->Arg(27)44 ->Arg(28)45 ->Arg(29)46 ->Arg(30)47 ->Arg(31)48 ->Arg(32)49 ->Arg(64)50 ->Arg(512)51 ->Arg(1024)52 ->Arg(4000)53 ->Arg(4096)54 ->Arg(5500)55 ->Arg(64000)56 ->Arg(65536)57 ->Arg(70000);58}59 60template <class T>61static void BM_std_minmax(benchmark::State& state) {62 std::vector<T> vec(state.range(), 3);63 64 for (auto _ : state) {65 benchmark::DoNotOptimize(vec);66 benchmark::DoNotOptimize(std::ranges::minmax(vec));67 }68}69BENCHMARK(BM_std_minmax<char>)->Apply(run_sizes);70BENCHMARK(BM_std_minmax<short>)->Apply(run_sizes);71BENCHMARK(BM_std_minmax<int>)->Apply(run_sizes);72BENCHMARK(BM_std_minmax<long long>)->Apply(run_sizes);73BENCHMARK(BM_std_minmax<unsigned char>)->Apply(run_sizes);74BENCHMARK(BM_std_minmax<unsigned short>)->Apply(run_sizes);75BENCHMARK(BM_std_minmax<unsigned int>)->Apply(run_sizes);76BENCHMARK(BM_std_minmax<unsigned long long>)->Apply(run_sizes);77 78BENCHMARK_MAIN();79