From 695e58f7ceadab180e8c0b62ded69cf117b21050 Mon Sep 17 00:00:00 2001 From: Dirk Lattermann Date: Fri, 5 Oct 2018 23:09:26 +0200 Subject: [PATCH 1/4] Implement Summable, Invertible, Comparable for Duration Signed-off-by: Dirk Lattermann --- source/ceylon/time/Duration.ceylon | 20 +++++++++++++++++- .../test/ceylon/time/testDuration.ceylon | 21 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/source/ceylon/time/Duration.ceylon b/source/ceylon/time/Duration.ceylon index aeb23f3f..f0cb5048 100644 --- a/source/ceylon/time/Duration.ceylon +++ b/source/ceylon/time/Duration.ceylon @@ -10,10 +10,20 @@ import ceylon.time.base { ReadableDuration } "Duration specifies a discreet amount of milliseconds between two instances of time." -shared serializable class Duration(milliseconds) satisfies ReadableDuration & Scalable { +shared serializable class Duration satisfies ReadableDuration + & Comparable + & Summable + & Scalable + & Invertible { + + shared static Duration zero = Duration(0); "Number of milliseconds of this duration." shared actual Integer milliseconds; + + shared new(Integer milliseconds) { + this.milliseconds = milliseconds; + } "Returns this duration as a period of milliseconds." shared Period period => Period { milliseconds = milliseconds; }; @@ -35,6 +45,14 @@ shared serializable class Duration(milliseconds) satisfies ReadableDuration & Sc value result = 3; return prime * result + milliseconds.hash; } + + shared actual Comparison compare(Duration other) => milliseconds.compare(other.milliseconds); + + shared actual Duration plus(Duration other) => Duration(milliseconds.plus(other.milliseconds)); + + shared actual Duration negated => Duration(milliseconds.negated); + + shared actual Duration minus(Duration other) => Duration(milliseconds.minus(other.milliseconds)); "Returns a new [[Duration]] with it´s milliseconds scaled." shared actual Duration scale(Integer scale) => Duration( scale * milliseconds ); diff --git a/test-source/test/ceylon/time/testDuration.ceylon b/test-source/test/ceylon/time/testDuration.ceylon index 378b7df3..c18b5674 100644 --- a/test-source/test/ceylon/time/testDuration.ceylon +++ b/test-source/test/ceylon/time/testDuration.ceylon @@ -14,3 +14,24 @@ import ceylon.time { parameters (`value scalableDurationTests`) shared test void testScalableDuration(Duration expectedDuration, Integer scale) => assertEquals { expected = expectedDuration; actual = scale ** Duration(1000); }; + +shared test void testPlus() + => assertEquals (Duration.zero, Duration(-4567) + Duration(4567)); + +shared test void testInv() + => assertEquals (Duration(-99), -Duration(99)); + +shared test void testInvZero() + => assertEquals (Duration.zero, -Duration.zero); + +shared test void testMinus() + => assertEquals (Duration.zero, Duration(4567) - Duration(4567)); + +shared test void testCompare() + => assertEquals (Comparison.smaller, Duration(345) <=> Duration(4567)); + +shared test void testCompare() + => assertEquals (Comparison.greater, Duration(3450) <=> Duration(456)); + +shared test void testCompare() + => assertEquals (Comparison.equal, Duration(345) <=> Duration(346)); From 685de7cb729251cfdf294b9f43403c5911cf2561 Mon Sep 17 00:00:00 2001 From: Dirk Lattermann Date: Wed, 10 Oct 2018 17:32:05 +0200 Subject: [PATCH 2/4] Fix typo in test Signed-off-by: Dirk Lattermann --- test-source/test/ceylon/time/testDuration.ceylon | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-source/test/ceylon/time/testDuration.ceylon b/test-source/test/ceylon/time/testDuration.ceylon index c18b5674..e891bc18 100644 --- a/test-source/test/ceylon/time/testDuration.ceylon +++ b/test-source/test/ceylon/time/testDuration.ceylon @@ -34,4 +34,4 @@ shared test void testCompare() => assertEquals (Comparison.greater, Duration(3450) <=> Duration(456)); shared test void testCompare() - => assertEquals (Comparison.equal, Duration(345) <=> Duration(346)); + => assertEquals (Comparison.equal, Duration(345) <=> Duration(345)); From 26b24681d1935f707a6967ac8d4e45016036146e Mon Sep 17 00:00:00 2001 From: Dirk Lattermann Date: Thu, 11 Oct 2018 07:41:29 +0200 Subject: [PATCH 3/4] Pass actual/expected parameters in tests in correct order Signed-off-by: Dirk Lattermann --- test-source/test/ceylon/time/testDuration.ceylon | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test-source/test/ceylon/time/testDuration.ceylon b/test-source/test/ceylon/time/testDuration.ceylon index e891bc18..f6a1cfea 100644 --- a/test-source/test/ceylon/time/testDuration.ceylon +++ b/test-source/test/ceylon/time/testDuration.ceylon @@ -16,22 +16,22 @@ shared test void testScalableDuration(Duration expectedDuration, Integer scale) => assertEquals { expected = expectedDuration; actual = scale ** Duration(1000); }; shared test void testPlus() - => assertEquals (Duration.zero, Duration(-4567) + Duration(4567)); + => assertEquals (Duration(-4567) + Duration(4567), Duration.zero); shared test void testInv() - => assertEquals (Duration(-99), -Duration(99)); + => assertEquals (-Duration(99), Duration(-99)); shared test void testInvZero() - => assertEquals (Duration.zero, -Duration.zero); + => assertEquals (-Duration.zero, Duration.zero); shared test void testMinus() - => assertEquals (Duration.zero, Duration(4567) - Duration(4567)); + => assertEquals (Duration(4567) - Duration(4567), Duration.zero); shared test void testCompare() - => assertEquals (Comparison.smaller, Duration(345) <=> Duration(4567)); + => assertEquals (Duration(345) <=> Duration(4567), Comparison.smaller); shared test void testCompare() - => assertEquals (Comparison.greater, Duration(3450) <=> Duration(456)); + => assertEquals (Duration(3450) <=> Duration(456), Comparison.greater); shared test void testCompare() - => assertEquals (Comparison.equal, Duration(345) <=> Duration(345)); + => assertEquals (Duration(345) <=> Duration(345), Comparison.equal); From b1dd1be0b8e03bbde09f8a59fb74b4a2a1bb1773 Mon Sep 17 00:00:00 2001 From: Dirk Lattermann Date: Thu, 11 Oct 2018 22:57:14 +0200 Subject: [PATCH 4/4] Use named parameters in assertions Signed-off-by: Dirk Lattermann --- test-source/test/ceylon/time/testDuration.ceylon | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test-source/test/ceylon/time/testDuration.ceylon b/test-source/test/ceylon/time/testDuration.ceylon index f6a1cfea..2fbe7795 100644 --- a/test-source/test/ceylon/time/testDuration.ceylon +++ b/test-source/test/ceylon/time/testDuration.ceylon @@ -13,25 +13,25 @@ import ceylon.time { ]; parameters (`value scalableDurationTests`) shared test void testScalableDuration(Duration expectedDuration, Integer scale) - => assertEquals { expected = expectedDuration; actual = scale ** Duration(1000); }; + => assertEquals { actual = scale ** Duration(1000); expected = expectedDuration; }; shared test void testPlus() - => assertEquals (Duration(-4567) + Duration(4567), Duration.zero); + => assertEquals { actual = Duration(-4567) + Duration(4567); expected= Duration.zero; }; shared test void testInv() - => assertEquals (-Duration(99), Duration(-99)); + => assertEquals { actual = -Duration(99); expected= Duration(-99); }; shared test void testInvZero() - => assertEquals (-Duration.zero, Duration.zero); + => assertEquals { actual = -Duration.zero; expected= Duration.zero; }; shared test void testMinus() - => assertEquals (Duration(4567) - Duration(4567), Duration.zero); + => assertEquals { actual = Duration(4567) - Duration(4567); expected= Duration.zero; }; shared test void testCompare() - => assertEquals (Duration(345) <=> Duration(4567), Comparison.smaller); + => assertEquals { actual = Duration(345) <=> Duration(4567); expected= Comparison.smaller; }; shared test void testCompare() - => assertEquals (Duration(3450) <=> Duration(456), Comparison.greater); + => assertEquals { actual = Duration(3450) <=> Duration(456); expected= Comparison.greater; }; shared test void testCompare() - => assertEquals (Duration(345) <=> Duration(345), Comparison.equal); + => assertEquals { actual = Duration(345) <=> Duration(345); expected= Comparison.equal; };