This is an automated email from the ASF dual-hosted git repository. dblevins pushed a commit to branch TOMEE-4050 in repository https://gitbox.apache.org/repos/asf/tomee.git
commit 5e943d37fb26f971391c7fe9afe2d392f5b30cae Author: David Blevins <dblev...@tomitribe.com> AuthorDate: Wed Sep 21 13:48:03 2022 -0700 Add greater/less operations on Duration --- .../java/org/apache/openejb/util/Duration.java | 21 +++++++ .../java/org/apache/openejb/util/DurationTest.java | 65 ++++++++++++++++++++++ 2 files changed, 86 insertions(+) diff --git a/container/openejb-core/src/main/java/org/apache/openejb/util/Duration.java b/container/openejb-core/src/main/java/org/apache/openejb/util/Duration.java index f028a16327..dd7b1c6af4 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/util/Duration.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/util/Duration.java @@ -115,6 +115,7 @@ public class Duration { this.unit = unit; } + private static final class Normalize { private final long a; private final long b; @@ -168,6 +169,26 @@ public class Duration { return new Duration(n.a - n.b, n.base); } + public boolean greaterThan(final Duration that) { + final Normalize n = new Normalize(this, that); + return n.a > n.b; + } + + public boolean greaterOrEqualTo(final Duration that) { + final Normalize n = new Normalize(this, that); + return n.a >= n.b; + } + + public boolean lessThan(final Duration that) { + final Normalize n = new Normalize(this, that); + return n.a < n.b; + } + + public boolean lessOrEqualTo(final Duration that) { + final Normalize n = new Normalize(this, that); + return n.a <= n.b; + } + public static Duration parse(final String text) { return new Duration(text); } diff --git a/container/openejb-core/src/test/java/org/apache/openejb/util/DurationTest.java b/container/openejb-core/src/test/java/org/apache/openejb/util/DurationTest.java index 2713c0d270..4f370dbac0 100644 --- a/container/openejb-core/src/test/java/org/apache/openejb/util/DurationTest.java +++ b/container/openejb-core/src/test/java/org/apache/openejb/util/DurationTest.java @@ -20,6 +20,7 @@ import junit.framework.TestCase; import static java.util.concurrent.TimeUnit.MICROSECONDS; import static java.util.concurrent.TimeUnit.MILLISECONDS; +import static java.util.concurrent.TimeUnit.MINUTES; import static java.util.concurrent.TimeUnit.NANOSECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -75,4 +76,68 @@ public class DurationTest extends TestCase { assertEquals(new Duration(125, SECONDS), Duration.parse("2 minutes and 5 seconds")); } + + public void testAdd() { + final Duration a = new Duration(1, SECONDS); + final Duration b = new Duration(1, MINUTES); + + + final Duration c = a.add(b); + assertEquals(c.getUnit(), SECONDS); + assertEquals(c.getTime(), 61); + + final Duration d = b.add(a); + assertEquals(d.getUnit(), SECONDS); + assertEquals(d.getTime(), 61); + } + + public void testSubtract() { + final Duration a = new Duration(1, SECONDS); + final Duration b = new Duration(1, MINUTES); + + + final Duration c = a.subtract(b); + assertEquals(c.getUnit(), SECONDS); + assertEquals(c.getTime(), -59); + + final Duration d = b.subtract(a); + assertEquals(d.getUnit(), SECONDS); + assertEquals(d.getTime(), 59); + } + + public void testGreaterThan() { + final Duration a = new Duration(1, SECONDS); + final Duration b = new Duration(1, MINUTES); + + assertFalse(a.greaterThan(b)); + assertFalse(a.greaterThan(a)); + assertTrue(b.greaterThan(a)); + } + + public void testLessThan() { + final Duration a = new Duration(1, SECONDS); + final Duration b = new Duration(1, MINUTES); + + assertTrue(a.lessThan(b)); + assertFalse(a.lessThan(a)); + assertFalse(b.lessThan(a)); + } + + public void testGreaterOrEqual() { + final Duration a = new Duration(1, SECONDS); + final Duration b = new Duration(1, MINUTES); + + assertFalse(a.greaterOrEqualTo(b)); + assertTrue(a.greaterOrEqualTo(a)); + assertTrue(b.greaterOrEqualTo(a)); + } + + public void testLessOrEqual() { + final Duration a = new Duration(1, SECONDS); + final Duration b = new Duration(1, MINUTES); + + assertTrue(a.lessOrEqualTo(b)); + assertTrue(a.lessOrEqualTo(a)); + assertFalse(b.lessOrEqualTo(a)); + } }