diff --git a/.gitignore b/.gitignore index 1ddd381..0d5a8d5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # Project specific /build/ +/CMakeLists.txt.user # Prerequisites *.d diff --git a/README.md b/README.md index 034d2b6..5c4d00d 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,4 @@ Various C++ benchmarks: - transform.cpp - benchmark std::transform vs loop and custom lowercase and tolower +![](bench_lowercase.png) diff --git a/bench_lowercase.png b/bench_lowercase.png new file mode 100644 index 0000000..1ef7ba2 Binary files /dev/null and b/bench_lowercase.png differ diff --git a/src/transform.cpp b/src/transform.cpp index 13765be..bbe8159 100755 --- a/src/transform.cpp +++ b/src/transform.cpp @@ -53,3 +53,16 @@ int main(int argc, char** argv) { benchmark::RunSpecifiedBenchmarks(); return EX_OK; } + +static void loop_lowercase_toupper(benchmark::State& state) { + for (auto _ : state) { // Code inside this loop is measured repeatedly + std::string name = data; + for (char& c : name) { + if (c >= 'a' && c <= 'z') { + c = static_cast(std::toupper(c)); + } + } + benchmark::DoNotOptimize(name); // Make sure the variable is not optimized away by compiler + } +} +BENCHMARK(loop_lowercase_toupper); // Register the function as a benchmark