@@ -8,9 +8,9 @@ import Data.Foldable (mconcat)
8
8
import Data.Maybe (Maybe (..))
9
9
import Data.Maybe.Unsafe (fromJust )
10
10
import Test.Assert (assert )
11
- import Test.QuickCheck (quickCheck )
11
+ import Test.QuickCheck (QC (), quickCheck )
12
12
import Test.QuickCheck.Arbitrary (Arbitrary )
13
- import Test.QuickCheck.Gen (Gen (.. ), chooseInt , arrayOf , elements )
13
+ import Test.QuickCheck.Gen (Gen (), chooseInt , arrayOf , elements )
14
14
import qualified Data.Int as Int
15
15
16
16
-- | Newtype with an Arbitrary instance that generates only small integers
@@ -23,11 +23,13 @@ runSmallInt :: SmallInt -> Int
23
23
runSmallInt (SmallInt n) = n
24
24
25
25
-- | Arbitrary instance for BigInt
26
- instance arbitraryBigInt :: Arbitrary BigInt where
26
+ newtype TestBigInt = TestBigInt BigInt
27
+
28
+ instance arbitraryBigInt :: Arbitrary TestBigInt where
27
29
arbitrary = do
28
30
n <- (fromJust <<< fromString) <$> digitString
29
31
op <- elements id [negate]
30
- return (op n)
32
+ return (TestBigInt ( op n) )
31
33
where digits :: Gen Int
32
34
digits = chooseInt 0 9
33
35
digitString :: Gen String
@@ -38,9 +40,9 @@ fromSmallInt :: SmallInt -> BigInt
38
40
fromSmallInt = fromInt <<< runSmallInt
39
41
40
42
-- | Test if a binary relation holds before and after converting to BigInt.
41
- testBinary :: (BigInt -> BigInt -> BigInt )
43
+ testBinary :: forall eff . (BigInt -> BigInt -> BigInt )
42
44
-> (Int -> Int -> Int )
43
- -> _
45
+ -> QC eff Unit
44
46
testBinary f g = quickCheck (\x y -> (fromInt x) `f` (fromInt y) == fromInt (x `g` y))
45
47
46
48
main = do
@@ -59,7 +61,7 @@ main = do
59
61
assert $ fromString " 2.1" == Nothing
60
62
assert $ fromString " 123456789" == Just (fromInt 123456789 )
61
63
assert $ fromString " 1e7" == Just (fromInt 10000000 )
62
- quickCheck $ \a -> (fromString <<< toString) a == Just a
64
+ quickCheck $ \( TestBigInt a) -> (fromString <<< toString) a == Just a
63
65
64
66
log " Parsing strings with a different base"
65
67
assert $ fromBase 2 " 100" == Just four
@@ -98,4 +100,4 @@ main = do
98
100
assert $ filter (prime <<< fromInt) (range 2 20 ) == [2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 ]
99
101
100
102
log " Absolute value"
101
- quickCheck $ \x -> abs x == if x > zero then x else (-x)
103
+ quickCheck $ \( TestBigInt x) -> abs x == if x > zero then x else (-x)
0 commit comments