/
RowSpec.scala
31 lines (26 loc) · 919 Bytes
/
RowSpec.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package astrac.boxtables
import astrac.boxtables.string._
import astrac.boxtables.string.instances._
import cats.kernel.Eq
import cats.tests.CatsSuite
import cats.laws.discipline.ContravariantMonoidalTests
import org.scalacheck.{Arbitrary, Gen}
class RowSpec extends CatsSuite {
val equalitySamples = 100
implicit def arbitraryRow[A: Row]: Arbitrary[Row[A]] =
Arbitrary(Gen.const(Row[A]))
implicit def eqRow[A: Arbitrary]: Eq[Row[A]] = Eq.instance { (a, b) =>
Iterator
.continually(Arbitrary.arbitrary[A].sample)
.collect {
case Some(v) => v
}
.take(equalitySamples)
.forall(e =>
a.cells.map(_.content(e)) == b.cells.map(_.content(e)) &&
a.cells.map(_.formatter) == b.cells.map(_.formatter))
}
checkAll("Row.ControvariantMonoidalLaws",
ContravariantMonoidalTests[Row]
.contravariantMonoidal[Int, String, Boolean])
}