-
Notifications
You must be signed in to change notification settings - Fork 0
/
EitherTSpec.scala
98 lines (77 loc) · 2.73 KB
/
EitherTSpec.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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package just.fp
import hedgehog._
import hedgehog.runner._
/**
* @author Kevin Lee
* @since 2019-09-19
*/
object EitherTSpec extends Properties {
override def tests: List[Test] = List(
property("testEitherTFunctorLaws", EitherTFunctorLaws.laws)
, property("testEitherTApplicativeLaws", EitherTApplicativeLaws.laws)
, property("testEitherTMonadLaws", EitherTMonadLaws.laws)
, property("testEitherTIdFunctorLaws", EitherTIdFunctorLaws.laws)
, property("testEitherTIdApplicativeLaws", EitherTIdApplicativeLaws.laws)
, property("testEitherTIdMonadLaws", EitherTIdMonadLaws.laws)
)
object EitherTFunctorLaws {
type EitherTOption[A] = EitherT[Option, String, A]
def genEitherT: Gen[EitherTOption[Int]] = Gens.genEitherT(Gens.genUnicodeString, Gens.genIntFromMinToMax)
def laws: Property =
Specs.functorLaws.laws[EitherTOption](
genEitherT
, Gens.genIntToInt
)
}
object EitherTApplicativeLaws {
type EitherTOption[A] = EitherT[Option, String, A]
def genEitherT: Gen[EitherTOption[Int]] = Gens.genEitherT(Gens.genUnicodeString, Gens.genIntFromMinToMax)
def laws: Property =
Specs.applicativeLaws.laws[EitherTOption](
genEitherT
, Gens.genIntFromMinToMax
, Gens.genIntToInt
)
}
object EitherTMonadLaws {
type EitherTOption[A] = EitherT[Option, String, A]
def genEitherT: Gen[EitherTOption[Int]] = Gens.genEitherT(Gens.genUnicodeString, Gens.genIntFromMinToMax)
def laws: Property =
Specs.monadLaws.laws[EitherTOption](
genEitherT
, Gens.genIntFromMinToMax
, Gens.genIntToInt
, Gens.genAToMonadA(Gens.genIntToInt)
)
}
object EitherTIdFunctorLaws {
type EitherTId[A] = EitherT[Id, String, A]
def genEitherT: Gen[EitherTId[Int]] = Gens.genEitherT(Gens.genUnicodeString, Gens.genIntFromMinToMax)
def laws: Property =
Specs.functorLaws.laws[EitherTId](
genEitherT
, Gens.genIntToInt
)
}
object EitherTIdApplicativeLaws {
type EitherTId[A] = EitherT[Id, String, A]
def genEitherT: Gen[EitherTId[Int]] = Gens.genEitherT(Gens.genUnicodeString, Gens.genIntFromMinToMax)
def laws: Property =
Specs.applicativeLaws.laws[EitherTId](
genEitherT
, Gens.genIntFromMinToMax
, Gens.genIntToInt
)
}
object EitherTIdMonadLaws {
type EitherTId[A] = EitherT[Id, String, A]
def genEitherT: Gen[EitherTId[Int]] = Gens.genEitherT(Gens.genUnicodeString, Gens.genIntFromMinToMax)
def laws: Property =
Specs.monadLaws.laws[EitherTId](
genEitherT
, Gens.genIntFromMinToMax
, Gens.genIntToInt
, Gens.genAToMonadA(Gens.genIntToInt)
)
}
}