-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSizeTests.hs
41 lines (29 loc) · 1.02 KB
/
SizeTests.hs
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
module SizeTests (runAll) where
import Prelude hiding (isInfinite)
import Control.Monad (liftM)
import Test.QuickCheck
import BRC.Size
runAll :: IO ()
runAll = do
quickCheck prop_infiniteSize
quickCheck prop_finiteSize
quickCheck prop_eq
quickCheck prop_isInfinite
quickCheck prop_isFinite
prop_infiniteSize :: Size -> Bool
prop_infiniteSize s = s <= infinite
prop_finiteSize :: Int -> Bool
prop_finiteSize n = maybe False (==n) (maybeCount (finite n))
prop_eq :: Size -> Size -> Bool
prop_eq s t =
(s == t) `iff` (isInfinite s && isInfinite t ||
isFinite s && isFinite t && maybeCount s == maybeCount t)
prop_isInfinite :: Int -> Bool
prop_isInfinite n = isInfinite infinite && not (isInfinite (finite n))
prop_isFinite :: Int -> Bool
prop_isFinite n = not (isFinite infinite) && isFinite (finite n)
instance Arbitrary Size where
arbitrary = frequency [(10, return infinite),
(90, finite `liftM` elements [0..100])]
iff :: Bool -> Bool -> Bool
iff = (==)