diff --git a/CMakeLists.txt b/CMakeLists.txt index 60fcc2c..2b3adcb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,3 +73,10 @@ add_executable( test/fizzbuzz_test.cpp ) target_link_libraries(tests PRIVATE Catch2::Catch2WithMain) + +find_package(nanobench REQUIRED) +add_executable( + palindrome_benchmark + "benchmark/palindrome_benchmark.cpp" +) +target_link_libraries(palindrome_benchmark PRIVATE nanobench::nanobench) diff --git a/benchmark/palindrome_benchmark.cpp b/benchmark/palindrome_benchmark.cpp new file mode 100644 index 0000000..67620c4 --- /dev/null +++ b/benchmark/palindrome_benchmark.cpp @@ -0,0 +1,61 @@ +// Copyright (c) Omar Boukli-Hacene. All rights reserved. +// Distributed under an MIT-style license that can be +// found in the LICENSE file. + +// SPDX-License-Identifier: MIT + +#include "forfun/palindrome.hpp" + +#define ANKERL_NANOBENCH_IMPLEMENT +#include + +#include + +int main() { + std::string_view sv{"oooooooooooooooooooooooooooooooooooooooooooooooooo" + "oooooooooooooooooooooooooooooooooooooooooooooooooo"}; + + ankerl::nanobench::Bench().run( + "forfun::palindrome::raw::is_palindrome", [&sv]() { + ankerl::nanobench::doNotOptimizeAway( + forfun::palindrome::raw::is_palindrome(sv)); + }); + + ankerl::nanobench::Bench().run( + "forfun::palindrome::fast::is_palindrome", [&sv]() { + ankerl::nanobench::doNotOptimizeAway( + forfun::palindrome::fast::is_palindrome(sv)); + }); + + ankerl::nanobench::Bench().run( + "forfun::palindrome::stl_bloated::is_palindrome", [&sv]() { + ankerl::nanobench::doNotOptimizeAway( + forfun::palindrome::stl_bloated::is_palindrome(sv)); + }); + + ankerl::nanobench::Bench().run( + "forfun::palindrome::stl_fast::is_palindrome", [&sv]() { + ankerl::nanobench::doNotOptimizeAway( + forfun::palindrome::stl_fast::is_palindrome(sv)); + }); + + ankerl::nanobench::Bench().run( + "forfun::palindrome::raw::is_palindrome_ci", [&sv]() { + ankerl::nanobench::doNotOptimizeAway( + forfun::palindrome::raw::is_palindrome_ci(sv)); + }); + + ankerl::nanobench::Bench().run( + "forfun::palindrome::fast::is_palindrome_ci", [&sv]() { + ankerl::nanobench::doNotOptimizeAway( + forfun::palindrome::fast::is_palindrome_ci(sv)); + }); + + ankerl::nanobench::Bench().run( + "forfun::palindrome::stl_bloated::is_palindrome_ci", [&sv]() { + ankerl::nanobench::doNotOptimizeAway( + forfun::palindrome::stl_bloated::is_palindrome_ci(sv)); + }); + + return 0; +} diff --git a/vcpkg.json b/vcpkg.json index ff20cfc..a727f95 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,5 +1,6 @@ { "dependencies": [ - "catch2" + "catch2", + "nanobench" ] }