xref: /llvm-project/libcxx/test/benchmarks/random.bench.cpp (revision b2d2494731976ab7aa9702f3134472db694b9332)
178b4b5ccSLouis Dionne //===----------------------------------------------------------------------===//
26a54dfbfSLouis Dionne //
378b4b5ccSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
478b4b5ccSLouis Dionne // See https://llvm.org/LICENSE.txt for license information.
578b4b5ccSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
678b4b5ccSLouis Dionne //
778b4b5ccSLouis Dionne //===----------------------------------------------------------------------===//
878b4b5ccSLouis Dionne 
9*b2d24947SLouis Dionne // UNSUPPORTED: c++03
10*b2d24947SLouis Dionne 
1178b4b5ccSLouis Dionne #include <algorithm>
1278b4b5ccSLouis Dionne #include <array>
1378b4b5ccSLouis Dionne #include <cstddef>
14*b2d24947SLouis Dionne #include <cstdint>
1578b4b5ccSLouis Dionne #include <functional>
1678b4b5ccSLouis Dionne #include <random>
1778b4b5ccSLouis Dionne 
1878b4b5ccSLouis Dionne #include "benchmark/benchmark.h"
1978b4b5ccSLouis Dionne 
2078b4b5ccSLouis Dionne constexpr std::size_t MAX_BUFFER_LEN = 256;
2178b4b5ccSLouis Dionne constexpr std::size_t MAX_SEED_LEN   = 16;
2278b4b5ccSLouis Dionne 
2378b4b5ccSLouis Dionne static void BM_SeedSeq_Generate(benchmark::State& state) {
2478b4b5ccSLouis Dionne   std::array<std::uint32_t, MAX_BUFFER_LEN> buffer;
2578b4b5ccSLouis Dionne   std::array<std::uint32_t, MAX_SEED_LEN> seeds;
2678b4b5ccSLouis Dionne   {
2778b4b5ccSLouis Dionne     std::random_device rd;
2878b4b5ccSLouis Dionne     std::generate(std::begin(seeds), std::begin(seeds) + state.range(0), [&]() { return rd(); });
2978b4b5ccSLouis Dionne   }
3078b4b5ccSLouis Dionne   std::seed_seq seed(std::begin(seeds), std::begin(seeds) + state.range(0));
3178b4b5ccSLouis Dionne   for (auto _ : state) {
3278b4b5ccSLouis Dionne     seed.generate(std::begin(buffer), std::begin(buffer) + state.range(1));
3378b4b5ccSLouis Dionne   }
3478b4b5ccSLouis Dionne }
3578b4b5ccSLouis Dionne BENCHMARK(BM_SeedSeq_Generate)->Ranges({{1, MAX_SEED_LEN}, {1, MAX_BUFFER_LEN}});
3678b4b5ccSLouis Dionne 
3778b4b5ccSLouis Dionne BENCHMARK_MAIN();
38