@@ -8,9 +8,9 @@ import Data.Foldable (mconcat)
88import Data.Maybe (Maybe (..))
99import Data.Maybe.Unsafe (fromJust )
1010import Test.Assert (assert )
11- import Test.QuickCheck (quickCheck )
11+ import Test.QuickCheck (QC (), quickCheck )
1212import Test.QuickCheck.Arbitrary (Arbitrary )
13- import Test.QuickCheck.Gen (Gen (.. ), chooseInt , arrayOf , elements )
13+ import Test.QuickCheck.Gen (Gen (), chooseInt , arrayOf , elements )
1414import qualified Data.Int as Int
1515
1616-- | Newtype with an Arbitrary instance that generates only small integers
@@ -23,11 +23,13 @@ runSmallInt :: SmallInt -> Int
2323runSmallInt (SmallInt n) = n
2424
2525-- | Arbitrary instance for BigInt
26- instance arbitraryBigInt :: Arbitrary BigInt where
26+ newtype TestBigInt = TestBigInt BigInt
27+
28+ instance arbitraryBigInt :: Arbitrary TestBigInt where
2729 arbitrary = do
2830 n <- (fromJust <<< fromString) <$> digitString
2931 op <- elements id [negate]
30- return (op n)
32+ return (TestBigInt ( op n) )
3133 where digits :: Gen Int
3234 digits = chooseInt 0 9
3335 digitString :: Gen String
@@ -38,9 +40,9 @@ fromSmallInt :: SmallInt -> BigInt
3840fromSmallInt = fromInt <<< runSmallInt
3941
4042-- | Test if a binary relation holds before and after converting to BigInt.
41- testBinary :: (BigInt -> BigInt -> BigInt )
43+ testBinary :: forall eff . (BigInt -> BigInt -> BigInt )
4244 -> (Int -> Int -> Int )
43- -> _
45+ -> QC eff Unit
4446testBinary f g = quickCheck (\x y -> (fromInt x) `f` (fromInt y) == fromInt (x `g` y))
4547
4648main = do
@@ -59,7 +61,7 @@ main = do
5961 assert $ fromString " 2.1" == Nothing
6062 assert $ fromString " 123456789" == Just (fromInt 123456789 )
6163 assert $ fromString " 1e7" == Just (fromInt 10000000 )
62- quickCheck $ \a -> (fromString <<< toString) a == Just a
64+ quickCheck $ \( TestBigInt a) -> (fromString <<< toString) a == Just a
6365
6466 log " Parsing strings with a different base"
6567 assert $ fromBase 2 " 100" == Just four
@@ -98,4 +100,4 @@ main = do
98100 assert $ filter (prime <<< fromInt) (range 2 20 ) == [2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 ]
99101
100102 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