Skip to content

Commit

Permalink
Add sequential roundtrip law
Browse files Browse the repository at this point in the history
  • Loading branch information
Luka Jacobowitz committed Sep 2, 2017
1 parent 8b9dcad commit d571771
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
3 changes: 3 additions & 0 deletions laws/src/main/scala/cats/laws/ParallelLaws.scala
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ trait ParallelLaws[M[_], F[_]] {

def parallelRoundTrip[A](ma: M[A]): IsEq[M[A]] =
P.sequential(monadM)(P.parallel(monadM)(ma)) <-> ma

def sequentialRoundTrip[A](fa: F[A]): IsEq[F[A]] =
P.parallel(monadM)(P.sequential(monadM)(fa)) <-> fa
}

object ParallelLaws {
Expand Down
12 changes: 7 additions & 5 deletions laws/src/main/scala/cats/laws/discipline/ParallelTests.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@ import org.typelevel.discipline.Laws
trait ParallelTests[M[_], F[_], A] extends Laws {
def laws: ParallelLaws[M, F]

def parallel(implicit ArbM: Arbitrary[M[A]], EqMa: Eq[M[A]]): RuleSet = new DefaultRuleSet(
"parallel",
None,
"parallel round trip" -> forAll((ma: M[A]) => laws.parallelRoundTrip(ma))
)
def parallel(implicit ArbM: Arbitrary[M[A]], EqMa: Eq[M[A]], ArbF: Arbitrary[F[A]], EqFa: Eq[F[A]]): RuleSet =
new DefaultRuleSet(
"parallel",
None,
"parallel round trip" -> forAll((ma: M[A]) => laws.parallelRoundTrip(ma)),
"sequential round trip" -> forAll((fa: F[A]) => laws.sequentialRoundTrip(fa))
)
}

object ParallelTests {
Expand Down

0 comments on commit d571771

Please sign in to comment.