@@ -3,13 +3,12 @@ module Test.QuickCheck.Laws.Control.Alt where
3
3
import Prelude
4
4
5
5
import Control.Alt (class Alt , (<|>))
6
+ import Control.Apply (lift2 , lift3 )
6
7
import Control.Monad.Eff.Console (log )
7
-
8
- import Type.Proxy (Proxy2 )
9
-
10
- import Test.QuickCheck (QC , quickCheck' )
11
- import Test.QuickCheck.Arbitrary (class Arbitrary )
8
+ import Test.QuickCheck (class Arbitrary , QC , arbitrary , quickCheck' )
9
+ import Test.QuickCheck.Gen (Gen )
12
10
import Test.QuickCheck.Laws (A , B )
11
+ import Type.Proxy (Proxy2 )
13
12
14
13
-- | - Associativity: `(x <|> y) <|> z == x <|> (y <|> z)`
15
14
-- | - Distributivity: `f <$> (x <|> y) == (f <$> x) <|> (f <$> y)`
@@ -21,18 +20,27 @@ checkAlt
21
20
⇒ Eq (f B )
22
21
⇒ Proxy2 f
23
22
→ QC eff Unit
24
- checkAlt _ = do
23
+ checkAlt _ = checkAltGen (arbitrary :: Gen (f A ))
24
+
25
+ checkAltGen
26
+ ∷ ∀ eff f
27
+ . Alt f
28
+ ⇒ Eq (f A )
29
+ ⇒ Eq (f B )
30
+ ⇒ Gen (f A )
31
+ → QC eff Unit
32
+ checkAltGen gen = do
25
33
26
34
log " Checking 'Associativity' law for Alt"
27
- quickCheck' 1000 associativity
35
+ quickCheck' 1000 $ lift3 associativity gen gen gen
28
36
29
37
log " Checking 'Distributivity' law for Alt"
30
- quickCheck' 1000 distributivity
38
+ quickCheck' 1000 $ lift2 distributivity gen gen
31
39
32
40
where
33
41
34
42
associativity ∷ f A → f A → f A → Boolean
35
43
associativity x y z = ((x <|> y) <|> z) == (x <|> (y <|> z))
36
44
37
- distributivity ∷ ( A → B ) → f A → f A → Boolean
38
- distributivity f x y = (f <$> (x <|> y)) == ((f <$> x) <|> (f <$> y))
45
+ distributivity ∷ f A → f A → ( A → B ) → Boolean
46
+ distributivity x y f = (f <$> (x <|> y)) == ((f <$> x) <|> (f <$> y))
0 commit comments