From 7d77c19e177232c96d1499c8b3cb754c3d23c723 Mon Sep 17 00:00:00 2001 From: Stephen Colebourne Date: Sun, 29 Oct 2023 21:27:35 +0000 Subject: [PATCH] Add or-equal methods * Add isGreaterThanOrEqual() * Add isLessThanOrEqual() Fixes #98 --- src/changes/changes.xml | 10 +++ src/main/java/org/joda/money/BigMoney.java | 24 ++++++ src/main/java/org/joda/money/Money.java | 30 +++++++ .../java/org/joda/money/TestBigMoney.java | 78 ++++++++++++++++--- src/test/java/org/joda/money/TestMoney.java | 78 ++++++++++++++++--- 5 files changed, 196 insertions(+), 24 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 7e465c1..5355839 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -8,6 +8,16 @@ + + + Add isGreaterThanOrEqual() and isLessThanOrEqual() to money classes. + Fixes #98. + + + Workaround issue with BigDecimal.stripTrailingZeros() on early Android versions. + Fixes #129. + + Change currency HRK to EUR. diff --git a/src/main/java/org/joda/money/BigMoney.java b/src/main/java/org/joda/money/BigMoney.java index 0be0073..c5d0a68 100644 --- a/src/main/java/org/joda/money/BigMoney.java +++ b/src/main/java/org/joda/money/BigMoney.java @@ -1643,6 +1643,18 @@ public boolean isGreaterThan(BigMoneyProvider other) { return compareTo(other) > 0; } + /** + * Checks if this monetary value is greater than or equal to another. + * The compared values must be in the same currency. + * + * @param other the other monetary value, not null + * @return true if this is greater than or equal to the specified monetary value + * @throws CurrencyMismatchException if the currencies differ + */ + public boolean isGreaterThanOrEqual(BigMoneyProvider other) { + return compareTo(other) >= 0; + } + /** * Checks if this monetary value is less than another. * The compared values must be in the same currency. @@ -1655,6 +1667,18 @@ public boolean isLessThan(BigMoneyProvider other) { return compareTo(other) < 0; } + /** + * Checks if this monetary value is less or equal to than another. + * The compared values must be in the same currency. + * + * @param other the other monetary value, not null + * @return true if this is less than or equal to the specified monetary value + * @throws CurrencyMismatchException if the currencies differ + */ + public boolean isLessThanOrEqual(BigMoneyProvider other) { + return compareTo(other) <= 0; + } + //----------------------------------------------------------------------- /** * Checks if this monetary value equals another. diff --git a/src/main/java/org/joda/money/Money.java b/src/main/java/org/joda/money/Money.java index ed41be0..3e554cf 100644 --- a/src/main/java/org/joda/money/Money.java +++ b/src/main/java/org/joda/money/Money.java @@ -1257,6 +1257,21 @@ public boolean isGreaterThan(BigMoneyProvider other) { return money.isGreaterThan(other); } + /** + * Checks if this monetary value is greater than or equal to another. + *

+ * This allows {@code Money} to be compared to any {@code BigMoneyProvider}. + * Scale is ignored in the comparison. + * The compared values must be in the same currency. + * + * @param other the other monetary value, not null + * @return true is this is greater than or equal to the specified monetary value + * @throws CurrencyMismatchException if the currencies differ + */ + public boolean isGreaterThanOrEqual(BigMoneyProvider other) { + return money.isGreaterThanOrEqual(other); + } + /** * Checks if this monetary value is less than another. *

@@ -1272,6 +1287,21 @@ public boolean isLessThan(BigMoneyProvider other) { return money.isLessThan(other); } + /** + * Checks if this monetary value is less than or equal to another. + *

+ * This allows {@code Money} to be compared to any {@code BigMoneyProvider}. + * Scale is ignored in the comparison. + * The compared values must be in the same currency. + * + * @param other the other monetary value, not null + * @return true is this is less than or equal to the specified monetary value + * @throws CurrencyMismatchException if the currencies differ + */ + public boolean isLessThanOrEqual(BigMoneyProvider other) { + return money.isLessThanOrEqual(other); + } + //----------------------------------------------------------------------- /** * Checks if this monetary value equals another. diff --git a/src/test/java/org/joda/money/TestBigMoney.java b/src/test/java/org/joda/money/TestBigMoney.java index d385b88..410cc3e 100644 --- a/src/test/java/org/joda/money/TestBigMoney.java +++ b/src/test/java/org/joda/money/TestBigMoney.java @@ -2591,17 +2591,16 @@ public void test_isGreaterThan() { BigMoney b = GBP_2_35; BigMoney c = GBP_2_36; assertEquals(false, a.isGreaterThan(a)); - assertEquals(false, b.isGreaterThan(b)); - assertEquals(false, c.isGreaterThan(c)); - assertEquals(false, a.isGreaterThan(b)); - assertEquals(true, b.isGreaterThan(a)); - assertEquals(false, a.isGreaterThan(c)); - assertEquals(true, c.isGreaterThan(a)); + assertEquals(true, b.isGreaterThan(a)); + assertEquals(false, b.isGreaterThan(b)); assertEquals(false, b.isGreaterThan(c)); + + assertEquals(true, c.isGreaterThan(a)); assertEquals(true, c.isGreaterThan(b)); + assertEquals(false, c.isGreaterThan(c)); } @Test(expected = CurrencyMismatchException.class) @@ -2611,6 +2610,34 @@ public void test_isGreaterThan_currenciesDiffer() { a.isGreaterThan(b); } + //----------------------------------------------------------------------- + // isGreaterThanOrEqual() + //----------------------------------------------------------------------- + @Test + public void test_isGreaterThanOrEqual() { + BigMoney a = GBP_2_34; + BigMoney b = GBP_2_35; + BigMoney c = GBP_2_36; + assertEquals(true, a.isGreaterThanOrEqual(a)); + assertEquals(false, a.isGreaterThanOrEqual(b)); + assertEquals(false, a.isGreaterThanOrEqual(c)); + + assertEquals(true, b.isGreaterThanOrEqual(a)); + assertEquals(true, b.isGreaterThanOrEqual(b)); + assertEquals(false, b.isGreaterThanOrEqual(c)); + + assertEquals(true, c.isGreaterThanOrEqual(a)); + assertEquals(true, c.isGreaterThanOrEqual(b)); + assertEquals(true, c.isGreaterThanOrEqual(c)); + } + + @Test(expected = CurrencyMismatchException.class) + public void test_isGreaterThanOrEqual_currenciesDiffer() { + BigMoney a = GBP_2_34; + BigMoney b = USD_2_35; + a.isGreaterThanOrEqual(b); + } + //----------------------------------------------------------------------- // isLessThan() //----------------------------------------------------------------------- @@ -2620,17 +2647,16 @@ public void test_isLessThan() { BigMoney b = GBP_2_35; BigMoney c = GBP_2_36; assertEquals(false, a.isLessThan(a)); - assertEquals(false, b.isLessThan(b)); - assertEquals(false, c.isLessThan(c)); - assertEquals(true, a.isLessThan(b)); - assertEquals(false, b.isLessThan(a)); - assertEquals(true, a.isLessThan(c)); - assertEquals(false, c.isLessThan(a)); + assertEquals(false, b.isLessThan(a)); + assertEquals(false, b.isLessThan(b)); assertEquals(true, b.isLessThan(c)); + + assertEquals(false, c.isLessThan(a)); assertEquals(false, c.isLessThan(b)); + assertEquals(false, c.isLessThan(c)); } @Test(expected = CurrencyMismatchException.class) @@ -2640,6 +2666,34 @@ public void test_isLessThan_currenciesDiffer() { a.isLessThan(b); } + //----------------------------------------------------------------------- + // isLessThanOrEqual() + //----------------------------------------------------------------------- + @Test + public void test_isLessThanOrEqual() { + BigMoney a = GBP_2_34; + BigMoney b = GBP_2_35; + BigMoney c = GBP_2_36; + assertEquals(true, a.isLessThanOrEqual(a)); + assertEquals(true, a.isLessThanOrEqual(b)); + assertEquals(true, a.isLessThanOrEqual(c)); + + assertEquals(false, b.isLessThanOrEqual(a)); + assertEquals(true, b.isLessThanOrEqual(b)); + assertEquals(true, b.isLessThanOrEqual(c)); + + assertEquals(false, c.isLessThanOrEqual(a)); + assertEquals(false, c.isLessThanOrEqual(b)); + assertEquals(true, c.isLessThanOrEqual(c)); + } + + @Test(expected = CurrencyMismatchException.class) + public void test_isLessThanOrEqual_currenciesDiffer() { + BigMoney a = GBP_2_34; + BigMoney b = USD_2_35; + a.isLessThanOrEqual(b); + } + //----------------------------------------------------------------------- // equals() hashCode() //----------------------------------------------------------------------- diff --git a/src/test/java/org/joda/money/TestMoney.java b/src/test/java/org/joda/money/TestMoney.java index d507dee..d6bd40a 100644 --- a/src/test/java/org/joda/money/TestMoney.java +++ b/src/test/java/org/joda/money/TestMoney.java @@ -2139,17 +2139,16 @@ public void test_isGreaterThan() { Money b = GBP_2_35; Money c = GBP_2_36; assertEquals(false, a.isGreaterThan(a)); - assertEquals(false, b.isGreaterThan(b)); - assertEquals(false, c.isGreaterThan(c)); - assertEquals(false, a.isGreaterThan(b)); - assertEquals(true, b.isGreaterThan(a)); - assertEquals(false, a.isGreaterThan(c)); - assertEquals(true, c.isGreaterThan(a)); + assertEquals(true, b.isGreaterThan(a)); + assertEquals(false, b.isGreaterThan(b)); assertEquals(false, b.isGreaterThan(c)); + + assertEquals(true, c.isGreaterThan(a)); assertEquals(true, c.isGreaterThan(b)); + assertEquals(false, c.isGreaterThan(c)); } @Test(expected = CurrencyMismatchException.class) @@ -2159,6 +2158,34 @@ public void test_isGreaterThan_currenciesDiffer() { a.isGreaterThan(b); } + //----------------------------------------------------------------------- + // isGreaterThanOrEqual() + //----------------------------------------------------------------------- + @Test + public void test_isGreaterThanOrEqual() { + Money a = GBP_2_34; + Money b = GBP_2_35; + Money c = GBP_2_36; + assertEquals(true, a.isGreaterThanOrEqual(a)); + assertEquals(false, a.isGreaterThanOrEqual(b)); + assertEquals(false, a.isGreaterThanOrEqual(c)); + + assertEquals(true, b.isGreaterThanOrEqual(a)); + assertEquals(true, b.isGreaterThanOrEqual(b)); + assertEquals(false, b.isGreaterThanOrEqual(c)); + + assertEquals(true, c.isGreaterThanOrEqual(a)); + assertEquals(true, c.isGreaterThanOrEqual(b)); + assertEquals(true, c.isGreaterThanOrEqual(c)); + } + + @Test(expected = CurrencyMismatchException.class) + public void test_isGreaterThanOrEqual_currenciesDiffer() { + Money a = GBP_2_34; + Money b = USD_2_35; + a.isGreaterThanOrEqual(b); + } + //----------------------------------------------------------------------- // isLessThan() //----------------------------------------------------------------------- @@ -2168,17 +2195,16 @@ public void test_isLessThan() { Money b = GBP_2_35; Money c = GBP_2_36; assertEquals(false, a.isLessThan(a)); - assertEquals(false, b.isLessThan(b)); - assertEquals(false, c.isLessThan(c)); - assertEquals(true, a.isLessThan(b)); - assertEquals(false, b.isLessThan(a)); - assertEquals(true, a.isLessThan(c)); - assertEquals(false, c.isLessThan(a)); + assertEquals(false, b.isLessThan(a)); + assertEquals(false, b.isLessThan(b)); assertEquals(true, b.isLessThan(c)); + + assertEquals(false, c.isLessThan(a)); assertEquals(false, c.isLessThan(b)); + assertEquals(false, c.isLessThan(c)); } @Test(expected = CurrencyMismatchException.class) @@ -2188,6 +2214,34 @@ public void test_isLessThan_currenciesDiffer() { a.isLessThan(b); } + //----------------------------------------------------------------------- + // isLessThanOrEqual() + //----------------------------------------------------------------------- + @Test + public void test_isLessThanOrEqual() { + Money a = GBP_2_34; + Money b = GBP_2_35; + Money c = GBP_2_36; + assertEquals(true, a.isLessThanOrEqual(a)); + assertEquals(true, a.isLessThanOrEqual(b)); + assertEquals(true, a.isLessThanOrEqual(c)); + + assertEquals(false, b.isLessThanOrEqual(a)); + assertEquals(true, b.isLessThanOrEqual(b)); + assertEquals(true, b.isLessThanOrEqual(c)); + + assertEquals(false, c.isLessThanOrEqual(a)); + assertEquals(false, c.isLessThanOrEqual(b)); + assertEquals(true, c.isLessThanOrEqual(c)); + } + + @Test(expected = CurrencyMismatchException.class) + public void test_isLessThanOrEqual_currenciesDiffer() { + Money a = GBP_2_34; + Money b = USD_2_35; + a.isLessThanOrEqual(b); + } + //----------------------------------------------------------------------- // equals() hashCode() //-----------------------------------------------------------------------