Skip to content

Commit 57b83f3

Browse files
committed
CE3: Use twitter-util Time and Stopwatch for Clock implementation.
Allows using the twitter-util testing facilities.
1 parent 0c22384 commit 57b83f3

File tree

3 files changed

+21
-54
lines changed

3 files changed

+21
-54
lines changed

effect3/src/main/scala/io/catbird/util/effect/RerunnableInstances.scala

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@ package io.catbird.util.effect
22

33
import cats.effect.Clock
44
import cats.effect.kernel.{ MonadCancel, Outcome, Sync }
5-
import com.twitter.util.{ Future, Monitor }
5+
import com.twitter.util.{ Future, Monitor, Stopwatch, Time }
66
import io.catbird.util.{ Rerunnable, RerunnableMonadError }
77

88
import java.lang.Throwable
99
import java.util.concurrent.TimeUnit
10-
import java.lang.System
1110

1211
import scala.Unit
1312
import scala.concurrent.duration.FiniteDuration
@@ -24,10 +23,10 @@ trait RerunnableInstances {
2423
Rerunnable(thunk)
2524

2625
final override def realTime: Rerunnable[FiniteDuration] =
27-
Rerunnable(FiniteDuration(System.currentTimeMillis(), TimeUnit.MILLISECONDS))
26+
Rerunnable(FiniteDuration(Time.nowNanoPrecision.inNanoseconds, TimeUnit.NANOSECONDS))
2827

2928
final override def monotonic: Rerunnable[FiniteDuration] =
30-
Rerunnable(FiniteDuration(System.nanoTime(), TimeUnit.NANOSECONDS))
29+
Rerunnable(FiniteDuration(Stopwatch.timeNanos(), TimeUnit.NANOSECONDS))
3130

3231
final override def forceR[A, B](fa: Rerunnable[A])(fb: Rerunnable[B]): Rerunnable[B] =
3332
fa.liftToTry.flatMap { resultA =>

effect3/src/test/scala/io/catbird/util/effect/RerunnableClockSuite.scala

Lines changed: 0 additions & 48 deletions
This file was deleted.

effect3/src/test/scala/io/catbird/util/effect/RerunnableSuite.scala

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,37 @@
11
package io.catbird.util.effect
22

3-
import cats.effect.MonadCancel
3+
import cats.effect.kernel.{ Clock, MonadCancel, Outcome }
44
import cats.effect.kernel.testkit.SyncTypeGenerators
55
import cats.effect.laws.SyncTests
66
import cats.instances.either._
77
import cats.instances.int._
88
import cats.instances.tuple._
99
import cats.instances.unit._
1010
import cats.laws.discipline.arbitrary._
11-
import com.twitter.util.{ Await, Monitor, Throw }
11+
import com.twitter.util.{ Await, Monitor, Throw, Time }
1212
import io.catbird.util.Rerunnable
1313

1414
class RerunnableSuite extends BaseLawSuite with SyncTypeGenerators with Runners {
1515

1616
// This includes tests for Clock, MonadCancel, and MonadError
1717
checkAll("Rerunnable[Int]", SyncTests[Rerunnable].sync[Int, Int, Int])
1818

19+
test("Retrieval of real time") {
20+
val nanos = 123456789L
21+
val result = Time.withTimeAt(Time.fromNanoseconds(nanos)) { _ =>
22+
unsafeRun(Clock[Rerunnable].realTime.map(_.toNanos))
23+
}
24+
assert(result == Outcome.succeeded(Some(nanos)))
25+
}
26+
27+
test("Retrieval of monotonic time") {
28+
val nanos = 123456789L
29+
val result = Time.withTimeAt(Time.fromNanoseconds(nanos)) { _ =>
30+
unsafeRun(Clock[Rerunnable].monotonic.map(_.toNanos))
31+
}
32+
assert(result == Outcome.succeeded(Some(nanos)))
33+
}
34+
1935
test("Exceptions thrown by release are handled by Monitor") {
2036
val useException = new Exception("thrown by use")
2137
val releaseException = new Exception("thrown by release")

0 commit comments

Comments
 (0)