Skip to content

Commit

Permalink
refactor: Convert to template function
Browse files Browse the repository at this point in the history
  • Loading branch information
oboukli committed Sep 5, 2023
1 parent 43de941 commit 832eb84
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 8 deletions.
3 changes: 2 additions & 1 deletion benchmark/palindromic_number_benchmark.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ TEST_CASE(
.title("Palindromic number")

.run(
NAMEOF_RAW(forfun::palindromic_number::fast::is_palindrome).c_str(),
NAMEOF_RAW(forfun::palindromic_number::fast::is_palindrome<int>)
.c_str(),
[]() {
auto r{forfun::palindromic_number::fast::is_palindrome(p)};
ankerl::nanobench::doNotOptimizeAway(r);
Expand Down
16 changes: 10 additions & 6 deletions include/forfun/palindromic_number.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,20 @@
#ifndef FORFUN_PALINDROMIC_NUMBER_HPP_
#define FORFUN_PALINDROMIC_NUMBER_HPP_

#include <concepts>

namespace forfun::palindromic_number {

namespace fast {

[[nodiscard]] constexpr bool is_palindrome(int const n) noexcept {
int nn{0};
int d{n};
while (d > 0) {
nn = (nn * 10) + d % 10;
d /= 10;
template <typename T>
requires std::integral<T>
[[nodiscard]] constexpr bool is_palindrome(T const n) noexcept {
T nn{};
auto d{n};
while (d > T{0}) {
nn = (nn * T{10}) + d % T{10};
d /= T{10};
}

return n == nn;
Expand Down
2 changes: 1 addition & 1 deletion test/palindromic_number_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

TEMPLATE_TEST_CASE_SIG(
"palindromic_number", "", ((auto sut), sut),
(forfun::palindromic_number::fast::is_palindrome),
(forfun::palindromic_number::fast::is_palindrome<int>),
(forfun::palindromic_number::stl::is_palindrome)) {
SECTION("Palindromic numbers") {
GIVEN("a palindromic number") {
Expand Down

0 comments on commit 832eb84

Please sign in to comment.