From a130dba66f965ead9e3554e5e3a73396b3e409bf Mon Sep 17 00:00:00 2001 From: Xavier Leclercq Date: Sat, 31 Jan 2026 23:40:53 +0000 Subject: [PATCH 1/2] Update FixedPointNumber.hpp --- .../Ishiko/Math/Numbers/FixedPointNumber.hpp | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/include/Ishiko/Math/Numbers/FixedPointNumber.hpp b/include/Ishiko/Math/Numbers/FixedPointNumber.hpp index 3c0ffe1..5ee5c5d 100644 --- a/include/Ishiko/Math/Numbers/FixedPointNumber.hpp +++ b/include/Ishiko/Math/Numbers/FixedPointNumber.hpp @@ -9,7 +9,29 @@ namespace Ishiko template class FixedPointNumber { + static_assert(scale <= precision, "Scale cannot exceed precision"); + + public: + FixedPointNumber(); + + private: + // Helper to select appropriate integer type based on precision + using storage_type = + std::conditional_t< + (precision <= std::numeric_limits::digits10), + int32_t, + std::conditional_t<(precision <= std::numeric_limits::digits10), int64_t, void> + >; + static_assert(!std::is_void::value, "Precision exceeds maximum supported value (18 digits)"); + + storage_type m_value; }; } +template +Ishiko::FixedPointNumber::FixedPointNumber() + : m_value(0) +{ +} + #endif From ab78c4961ef4b58548818f47ac931ddc60a2b549 Mon Sep 17 00:00:00 2001 From: Xavier Leclercq Date: Sat, 31 Jan 2026 23:57:34 +0000 Subject: [PATCH 2/2] Updates --- .../Ishiko/Math/Numbers/FixedPointNumber.hpp | 26 +++++++++++++++++-- numbers/tests/src/FixedPointNumberTests.cpp | 1 + 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/include/Ishiko/Math/Numbers/FixedPointNumber.hpp b/include/Ishiko/Math/Numbers/FixedPointNumber.hpp index 5ee5c5d..799642f 100644 --- a/include/Ishiko/Math/Numbers/FixedPointNumber.hpp +++ b/include/Ishiko/Math/Numbers/FixedPointNumber.hpp @@ -12,7 +12,11 @@ namespace Ishiko static_assert(scale <= precision, "Scale cannot exceed precision"); public: - FixedPointNumber(); + FixedPointNumber() noexcept; + explicit FixedPointNumber(int value); + + bool operator==(const FixedPointNumber& other) const noexcept; + bool operator!=(const FixedPointNumber& other) const noexcept; private: // Helper to select appropriate integer type based on precision @@ -29,9 +33,27 @@ namespace Ishiko } template -Ishiko::FixedPointNumber::FixedPointNumber() +Ishiko::FixedPointNumber::FixedPointNumber() noexcept : m_value(0) { } +template +Ishiko::FixedPointNumber::FixedPointNumber(int value) + : m_value(value) +{ +} + +template +bool Ishiko::FixedPointNumber::operator==(const FixedPointNumber& other) const noexcept +{ + return m_value == other.m_value; +} + +template +bool Ishiko::FixedPointNumber::operator!=(const FixedPointNumber& other) const noexcept +{ + return m_value != other.m_value; +} + #endif diff --git a/numbers/tests/src/FixedPointNumberTests.cpp b/numbers/tests/src/FixedPointNumberTests.cpp index 89c4331..bc3a61c 100644 --- a/numbers/tests/src/FixedPointNumberTests.cpp +++ b/numbers/tests/src/FixedPointNumberTests.cpp @@ -16,5 +16,6 @@ void FixedPointNumberTests::ConstructorTest1(Test& test) { FixedPointNumber<10, 2> fixed_point_number; + ISHIKO_TEST_FAIL_IF_NEQ(fixed_point_number, (FixedPointNumber<10, 2>(0))); ISHIKO_TEST_PASS(); }