diff options
Diffstat (limited to 'src/test/scala/com/drivergrp/core/TimeTest.scala')
-rw-r--r-- | src/test/scala/com/drivergrp/core/TimeTest.scala | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/test/scala/com/drivergrp/core/TimeTest.scala b/src/test/scala/com/drivergrp/core/TimeTest.scala index e6cca45..b928413 100644 --- a/src/test/scala/com/drivergrp/core/TimeTest.scala +++ b/src/test/scala/com/drivergrp/core/TimeTest.scala @@ -3,11 +3,18 @@ package com.drivergrp.core import java.util.TimeZone import com.drivergrp.core.time.{Time, _} +import org.scalacheck.{Arbitrary, Gen} import org.scalatest.{FlatSpec, Matchers} +import org.scalatest.prop.Checkers +import org.scalacheck.Arbitrary._ +import org.scalacheck.Prop.BooleanOperators import scala.concurrent.duration._ -class TimeTest extends FlatSpec with Matchers { +class TimeTest extends FlatSpec with Matchers with Checkers { + + implicit val arbitraryDuration = Arbitrary[Duration](Gen.chooseNum(0L, 9999999999L).map(_.milliseconds)) + implicit val arbitraryTime = Arbitrary[Time](Gen.chooseNum(0L, 9999999999L).map(millis => Time(millis))) "Time" should "have correct methods to compare" in { @@ -15,14 +22,24 @@ class TimeTest extends FlatSpec with Matchers { Time(123L).isAfter(Time(123L)) should be(false) Time(123L).isAfter(Time(234L)) should be(false) + check((a: Time, b: Time) => (a.millis > b.millis) ==> a.isAfter(b)) + Time(234L).isBefore(Time(123L)) should be(false) Time(123L).isBefore(Time(123L)) should be(false) Time(123L).isBefore(Time(234L)) should be(true) + + check { (a: Time, b: Time) => + (a.millis < b.millis) ==> a.isBefore(b) + } } it should "not modify time" in { Time(234L).millis should be(234L) + + check { millis: Long => + Time(millis).millis == millis + } } it should "support arithmetic with scala.concurrent.duration" in { @@ -30,12 +47,23 @@ class TimeTest extends FlatSpec with Matchers { Time(123L).advanceBy(0 minutes).millis should be(123L) Time(123L).advanceBy(1 second).millis should be(123L + Second) Time(123L).advanceBy(4 days).millis should be(123L + 4 * Days) + + check { (time: Time, duration: Duration) => + time.advanceBy(duration).millis == (time.millis + duration.toMillis) + } } it should "have ordering defined correctly" in { Seq(Time(321L), Time(123L), Time(231L)).sorted should contain theSameElementsInOrderAs Seq(Time(123L), Time(231L), Time(321L)) + + check { times: List[Time] => + times.sorted.sliding(2).filter(_.size == 2).forall { + case Seq(a, b) => + a.millis <= b.millis + } + } } it should "reset to the start of the period, e.g. month" in { |