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