From aff264318acdcbe55d893fc66f5980c3cdcc51d0 Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Mon, 23 Jan 2023 17:24:32 +0000 Subject: [PATCH 1/2] Restore all the `Monad` law tests --- frp/src/test/scala/calico/frp/SignalSuite.scala | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/frp/src/test/scala/calico/frp/SignalSuite.scala b/frp/src/test/scala/calico/frp/SignalSuite.scala index bcb93ce2..e20199ff 100644 --- a/frp/src/test/scala/calico/frp/SignalSuite.scala +++ b/frp/src/test/scala/calico/frp/SignalSuite.scala @@ -96,11 +96,4 @@ class SignalSuite extends DisciplineSuite, TestInstances: given Ticker = Ticker() // it is stack-safe, but expensive to test - MonadTests[Signal[IO, _]].stackUnsafeMonad[Int, Int, Int].all.properties.foreach { - case (id, prop) => - // TODO investigate failures #101 - if !Set( - "monad (stack-unsafe).flatMap associativity", - "monad (stack-unsafe).semigroupal associativity").contains(id) - then property(id)(prop) - } + checkAll("Signal", MonadTests[Signal[IO, _]].stackUnsafeMonad[Int, Int, Int]) From 70be22b52063ddd52f9871ca777179d7c891bd7f Mon Sep 17 00:00:00 2001 From: Arman Bilge Date: Mon, 23 Jan 2023 17:37:14 +0000 Subject: [PATCH 2/2] Write a better `Eq[Signal]` --- .../test/scala/calico/frp/SignalSuite.scala | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/frp/src/test/scala/calico/frp/SignalSuite.scala b/frp/src/test/scala/calico/frp/SignalSuite.scala index e20199ff..df71cf88 100644 --- a/frp/src/test/scala/calico/frp/SignalSuite.scala +++ b/frp/src/test/scala/calico/frp/SignalSuite.scala @@ -79,18 +79,16 @@ class SignalSuite extends DisciplineSuite, TestInstances: ) given [A: Eq](using Eq[IO[List[(A, FiniteDuration)]]]): Eq[Signal[IO, A]] = Eq.by { sig => - IO.ref(List.empty[(A, FiniteDuration)]).flatMap { ref => - TestControl.executeEmbed( - sig - .discrete - .evalMap(IO.realTime.tupleLeft(_)) - .evalMap(x => ref.update(x :: _)) - .compile - .drain - .timeoutTo(Long.MaxValue.nanos, IO.unit), - seed = Some(testControlSeed) - ) *> ref.get.map(_.distinctBy(_._2)) - } + TestControl.executeEmbed( + sig + .discrete + .evalMap(IO.realTime.tupleLeft(_)) + .interruptAfter(Long.MaxValue.nanos) + .compile + .to(List) + .map(_.reverse.distinctBy(_._2)), // reverse so latest wins in `distinctBy` + seed = Some(testControlSeed) + ) } given Ticker = Ticker()