Skip to content

Commit

Permalink
benchmark: Refactor palindrome benchmark
Browse files Browse the repository at this point in the history
  • Loading branch information
oboukli committed Jun 26, 2023
1 parent fecfd44 commit 6a070ea
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 50 deletions.
7 changes: 5 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,12 @@ add_executable(
)
target_link_libraries(tests PRIVATE Catch2::Catch2WithMain)

find_package(nanobench REQUIRED)
find_package(nanobench CONFIG REQUIRED)
add_executable(
palindrome_benchmark
"benchmark/palindrome_benchmark.cpp"
)
target_link_libraries(palindrome_benchmark PRIVATE nanobench::nanobench)
target_link_libraries(
palindrome_benchmark
PRIVATE nanobench::nanobench
)
123 changes: 75 additions & 48 deletions benchmark/palindrome_benchmark.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,58 +4,85 @@

// SPDX-License-Identifier: MIT

#include "forfun/palindrome.hpp"

#define ANKERL_NANOBENCH_IMPLEMENT
#include <nanobench.h>

#include <string_view>

#include "forfun/palindrome.hpp"

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;
constexpr std::string_view const palindrome{
"oooooooooooooooooooooooooooooooooooooooooooooooooo"
"oooooooooooooooooooooooooooooooooooooooooooooooooo"};

{
ankerl::nanobench::Bench()

.title("Palindrome (case-sensitive)")

.run(
"forfun::palindrome::fast::is_palindrome",
[&palindrome]() {
auto r{forfun::palindrome::fast::is_palindrome(palindrome)};
ankerl::nanobench::doNotOptimizeAway(r);
})

.run(
"forfun::palindrome::raw::is_palindrome",
[&palindrome]() {
auto r{forfun::palindrome::raw::is_palindrome(palindrome)};
ankerl::nanobench::doNotOptimizeAway(r);
})

.run(
"forfun::palindrome::stl_fast::is_palindrome",
[&palindrome]() {
auto r{forfun::palindrome::stl_fast::is_palindrome(
palindrome)};
ankerl::nanobench::doNotOptimizeAway(r);
})

.run(
"forfun::palindrome::stl_bloated::is_palindrome",
[&palindrome]() {
auto r{forfun::palindrome::stl_bloated::is_palindrome(
palindrome)};
ankerl::nanobench::doNotOptimizeAway(r);
})

;
}

{
ankerl::nanobench::Bench()

.title("Palindrome (case-insensitive)")

.run(
"forfun::palindrome::fast::is_palindrome_ci",
[&palindrome]() {
auto r{
forfun::palindrome::fast::is_palindrome_ci(palindrome)};
ankerl::nanobench::doNotOptimizeAway(r);
})

.run(
"forfun::palindrome::raw::is_palindrome_ci",
[&palindrome]() {
auto r{
forfun::palindrome::raw::is_palindrome_ci(palindrome)};
ankerl::nanobench::doNotOptimizeAway(r);
})

.run(
"forfun::palindrome::stl_bloated::is_palindrome_ci",
[&palindrome]() {
auto r{forfun::palindrome::stl_bloated::is_palindrome_ci(
palindrome)};
ankerl::nanobench::doNotOptimizeAway(r);
})

;
}
}

0 comments on commit 6a070ea

Please sign in to comment.