From 3397bf431044cca2fd43e38889d8c61bebb8c6e3 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Sat, 21 Aug 2021 12:48:37 +0200 Subject: [PATCH] abacus: bignum: fix order comparisons This is a pretty big oversight... --- src/bignum/bignum.cc | 4 ++++ tests/unit/bignum.cc | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/src/bignum/bignum.cc b/src/bignum/bignum.cc index a074ba9..abf0b5f 100644 --- a/src/bignum/bignum.cc +++ b/src/bignum/bignum.cc @@ -16,6 +16,10 @@ namespace { auto static constexpr BASE = 10; bool do_less_than(digits_type const& lhs, digits_type const& rhs) { + if (lhs.size() != rhs.size()) { + return lhs.size() < rhs.size(); + } + return std::lexicographical_compare(lhs.rbegin(), lhs.rend(), rhs.rbegin(), rhs.rend()); } diff --git a/tests/unit/bignum.cc b/tests/unit/bignum.cc index 0454414..86c6178 100644 --- a/tests/unit/bignum.cc +++ b/tests/unit/bignum.cc @@ -60,6 +60,14 @@ TEST(BigNum, comparisons) { EXPECT_GE(one, one); } +TEST(BigNum, comparisons_digits) { + auto const nine = BigNum(9); + auto const ten = BigNum(10); + + EXPECT_LT(nine, ten); + EXPECT_GT(ten, nine); +} + TEST(BigNum, unary) { auto const zero = BigNum(0); auto const one = BigNum(1);