brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · e9fb201 Raw
66 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 <cstddef>13#include <deque>14#include <iterator>15#include <list>16#include <string>17#include <vector>18 19#include "benchmark/benchmark.h"20#include "../../GenerateInput.h"21 22int main(int argc, char** argv) {23  auto std_swap_ranges = [](auto first1, auto last1, auto first2, auto) {24    return std::swap_ranges(first1, last1, first2);25  };26 27  // {std,ranges}::swap_ranges(normal container)28  {29    auto bm = []<class Container>(std::string name, auto swap_ranges) {30      benchmark::RegisterBenchmark(31          name,32          [swap_ranges](auto& st) {33            std::size_t const size = st.range(0);34            using ValueType        = typename Container::value_type;35            Container c1, c2;36            std::generate_n(std::back_inserter(c1), size, [] { return Generate<ValueType>::random(); });37            std::generate_n(std::back_inserter(c2), size, [] { return Generate<ValueType>::random(); });38 39            for ([[maybe_unused]] auto _ : st) {40              benchmark::DoNotOptimize(c1);41              benchmark::DoNotOptimize(c2);42              auto result = swap_ranges(c1.begin(), c1.end(), c2.begin(), c2.end());43              benchmark::DoNotOptimize(result);44              benchmark::DoNotOptimize(c1);45              benchmark::DoNotOptimize(c2);46            }47          })48          ->Arg(32)49          ->Arg(50) // non power-of-two50          ->Arg(1024)51          ->Arg(8192);52    };53    bm.operator()<std::vector<int>>("std::swap_ranges(vector<int>)", std_swap_ranges);54    bm.operator()<std::deque<int>>("std::swap_ranges(deque<int>)", std_swap_ranges);55    bm.operator()<std::list<int>>("std::swap_ranges(list<int>)", std_swap_ranges);56    bm.operator()<std::vector<int>>("rng::swap_ranges(vector<int>)", std::ranges::swap_ranges);57    bm.operator()<std::deque<int>>("rng::swap_ranges(deque<int>)", std::ranges::swap_ranges);58    bm.operator()<std::list<int>>("rng::swap_ranges(list<int>)", std::ranges::swap_ranges);59  }60 61  benchmark::Initialize(&argc, argv);62  benchmark::RunSpecifiedBenchmarks();63  benchmark::Shutdown();64  return 0;65}66