Home | History | Annotate | Download | only in benchmarks
      1 #include <unordered_set>
      2 #include <vector>
      3 #include <cstdint>
      4 
      5 #include "benchmark/benchmark.h"
      6 #include "GenerateInput.hpp"
      7 
      8 constexpr std::size_t MAX_STRING_LEN = 8 << 14;
      9 
     10 // Benchmark when there is no match.
     11 static void BM_StringFindNoMatch(benchmark::State &state) {
     12   std::string s1(state.range(0), '-');
     13   std::string s2(8, '*');
     14   while (state.KeepRunning())
     15     benchmark::DoNotOptimize(s1.find(s2));
     16 }
     17 BENCHMARK(BM_StringFindNoMatch)->Range(10, MAX_STRING_LEN);
     18 
     19 // Benchmark when the string matches first time.
     20 static void BM_StringFindAllMatch(benchmark::State &state) {
     21   std::string s1(MAX_STRING_LEN, '-');
     22   std::string s2(state.range(0), '-');
     23   while (state.KeepRunning())
     24     benchmark::DoNotOptimize(s1.find(s2));
     25 }
     26 BENCHMARK(BM_StringFindAllMatch)->Range(1, MAX_STRING_LEN);
     27 
     28 // Benchmark when the string matches somewhere in the end.
     29 static void BM_StringFindMatch1(benchmark::State &state) {
     30   std::string s1(MAX_STRING_LEN / 2, '*');
     31   s1 += std::string(state.range(0), '-');
     32   std::string s2(state.range(0), '-');
     33   while (state.KeepRunning())
     34     benchmark::DoNotOptimize(s1.find(s2));
     35 }
     36 BENCHMARK(BM_StringFindMatch1)->Range(1, MAX_STRING_LEN / 4);
     37 
     38 // Benchmark when the string matches somewhere from middle to the end.
     39 static void BM_StringFindMatch2(benchmark::State &state) {
     40   std::string s1(MAX_STRING_LEN / 2, '*');
     41   s1 += std::string(state.range(0), '-');
     42   s1 += std::string(state.range(0), '*');
     43   std::string s2(state.range(0), '-');
     44   while (state.KeepRunning())
     45     benchmark::DoNotOptimize(s1.find(s2));
     46 }
     47 BENCHMARK(BM_StringFindMatch2)->Range(1, MAX_STRING_LEN / 4);
     48 
     49 BENCHMARK_MAIN();
     50