63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
| #include <unordered_set>
 | |
| #include <vector>
 | |
| #include <cstdint>
 | |
| 
 | |
| #include "benchmark/benchmark_api.h"
 | |
| #include "GenerateInput.hpp"
 | |
| 
 | |
| constexpr std::size_t TestNumInputs = 1024;
 | |
| 
 | |
| template <class GenInputs>
 | |
| void BM_Sort(benchmark::State& st, GenInputs gen) {
 | |
|     using ValueType = typename decltype(gen(0))::value_type;
 | |
|     const auto in = gen(st.range(0));
 | |
|     std::vector<ValueType> inputs[5];
 | |
|     auto reset_inputs = [&]() {
 | |
|         for (auto& C : inputs) {
 | |
|             C = in;
 | |
|             benchmark::DoNotOptimize(C.data());
 | |
|         }
 | |
|     };
 | |
|     reset_inputs();
 | |
|     while (st.KeepRunning()) {
 | |
|         for (auto& I : inputs) {
 | |
|             std::sort(I.data(), I.data() + I.size());
 | |
|             benchmark::DoNotOptimize(I.data());
 | |
|         }
 | |
|         st.PauseTiming();
 | |
|         reset_inputs();
 | |
|         benchmark::ClobberMemory();
 | |
|         st.ResumeTiming();
 | |
|     }
 | |
| }
 | |
| 
 | |
| BENCHMARK_CAPTURE(BM_Sort, random_uint32,
 | |
|     getRandomIntegerInputs<uint32_t>)->Arg(TestNumInputs);
 | |
| 
 | |
| BENCHMARK_CAPTURE(BM_Sort, sorted_ascending_uint32,
 | |
|     getSortedIntegerInputs<uint32_t>)->Arg(TestNumInputs);
 | |
| 
 | |
| BENCHMARK_CAPTURE(BM_Sort, sorted_descending_uint32,
 | |
|     getReverseSortedIntegerInputs<uint32_t>)->Arg(TestNumInputs);
 | |
| 
 | |
| BENCHMARK_CAPTURE(BM_Sort, single_element_uint32,
 | |
|     getDuplicateIntegerInputs<uint32_t>)->Arg(TestNumInputs);
 | |
| 
 | |
| BENCHMARK_CAPTURE(BM_Sort, pipe_organ_uint32,
 | |
|     getPipeOrganIntegerInputs<uint32_t>)->Arg(TestNumInputs);
 | |
| 
 | |
| BENCHMARK_CAPTURE(BM_Sort, random_strings,
 | |
|     getRandomStringInputs)->Arg(TestNumInputs);
 | |
| 
 | |
| BENCHMARK_CAPTURE(BM_Sort, sorted_ascending_strings,
 | |
|     getSortedStringInputs)->Arg(TestNumInputs);
 | |
| 
 | |
| BENCHMARK_CAPTURE(BM_Sort, sorted_descending_strings,
 | |
|     getReverseSortedStringInputs)->Arg(TestNumInputs);
 | |
| 
 | |
| BENCHMARK_CAPTURE(BM_Sort, single_element_strings,
 | |
|     getDuplicateStringInputs)->Arg(TestNumInputs);
 | |
| 
 | |
| 
 | |
| BENCHMARK_MAIN()
 |