@@ -7,14 +7,23 @@ module Test.QuickCheck
77 , NonZero (..)
88 , Positive (..)
99 , QC (..)
10+ , arbitrary
11+ , coarbitrary
1012 , quickCheck
1113 , quickCheck'
1214 , quickCheckPure
1315 , Result (..)
16+ , runAlphaNumString
17+ , runNegative
18+ , runNonZero
19+ , runPositive
20+ , runSignum
21+ , Signum (..)
1422 , smallCheck
1523 , smallCheckPure
1624 , statCheck
1725 , statCheckPure
26+ , test
1827 , Testable
1928 ) where
2029
@@ -53,6 +62,8 @@ newtype Negative = Negative Number
5362
5463newtype NonZero = NonZero Number
5564
65+ newtype Signum = Signum Number
66+
5667type QC a = forall eff . Eff (trace :: Trace , random :: Random , err :: Exception | eff ) a
5768
5869data Result = Success | Failed String
@@ -127,8 +138,18 @@ countSuccesses = countSuccesses' 0
127138 countSuccesses' acc (Success : rest) = countSuccesses' (acc + 1 ) rest
128139 countSuccesses' acc (_ : rest) = countSuccesses' acc rest
129140
130- foreign import maxNumber " var maxNumber = Number.MAX_VALUE;" :: Number
131- foreign import minNumber " var minNumber = Number.MIN_VALUE;" :: Number
141+ maxNumber :: Number
142+ maxNumber = 9007199254740992
143+
144+ runAlphaNumString (AlphaNumString s) = s
145+
146+ runSignum (Signum n) = n
147+
148+ runPositive (Positive n) = n
149+
150+ runNegative (Negative n) = n
151+
152+ runNonZero (NonZero n) = n
132153
133154instance showResult :: Show Result where
134155 show Success = " Success"
@@ -156,7 +177,7 @@ instance coarbPositive :: CoArbitrary Positive where
156177 coarbitrary (Positive n) = coarbitrary n
157178
158179instance arbNegative :: Arbitrary Negative where
159- arbitrary = Negative <$> ((*) minNumber ) <$> uniform
180+ arbitrary = Negative <$> ((*) (-maxNumber) ) <$> uniform
160181
161182instance coarbNegative :: CoArbitrary Negative where
162183 coarbitrary (Negative n) = coarbitrary n
@@ -170,6 +191,13 @@ instance arbNonZero :: Arbitrary NonZero where
170191instance coarbNonZero :: CoArbitrary NonZero where
171192 coarbitrary (NonZero n) = coarbitrary n
172193
194+ instance arbSignum :: Arbitrary Signum where
195+ arbitrary = do b <- arbitrary
196+ return $ Signum (if b then 1 else -1 )
197+
198+ instance coarbSignum :: CoArbitrary Signum where
199+ coarbitrary (Signum n) = coarbitrary n
200+
173201instance arbBoolean :: Arbitrary Boolean where
174202 arbitrary = do
175203 n <- uniform
0 commit comments