From f79081670c3c0c6f8f5151784c8ddf8885bdc44c Mon Sep 17 00:00:00 2001 From: Vincent Hanquez Date: Mon, 1 Jun 2015 05:58:15 +0100 Subject: [PATCH] [tests] add better range integer generation. by default the number generated are fairly small. --- tests/Utils.hs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/tests/Utils.hs b/tests/Utils.hs index c1881ea..1da165d 100644 --- a/tests/Utils.hs +++ b/tests/Utils.hs @@ -1,12 +1,16 @@ module Utils where +import Control.Applicative import Control.Monad (replicateM) import Data.Char import Data.Word +import Data.List import Data.ByteString (ByteString) import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as L import Crypto.Random +import Crypto.Number.Serialize (os2ip) +import Prelude import Test.Tasty.QuickCheck @@ -43,6 +47,23 @@ newtype Int0_2901 = Int0_2901 Int instance Arbitrary Int0_2901 where arbitrary = Int0_2901 `fmap` choose (0,2901) +-- | a integer wrapper with a better range property +newtype QAInteger = QAInteger { getQAInteger :: Integer } + deriving (Show,Eq) + +instance Arbitrary QAInteger where + arbitrary = oneof + [ QAInteger . fromIntegral <$> (choose (0, 655536) :: Gen Int) -- small integer + , larger <$> choose (0,4096) <*> choose (0, 65536) -- medium integer + , QAInteger . os2ip . B.pack <$> (choose (0,32) >>= \n -> replicateM n arbitrary) -- [ 0 .. 2^32 ] sized integer + ] + where + larger :: Int -> Int -> QAInteger + larger p b = QAInteger (fromIntegral p * somePrime + fromIntegral b) + + somePrime :: Integer + somePrime = 18446744073709551557 + arbitraryBS :: Int -> Gen ByteString arbitraryBS n = B.pack `fmap` replicateM n arbitrary @@ -84,7 +105,7 @@ splitB l b = then let (b1, b2) = B.splitAt l b in b1 : splitB l b2 - else + else [ b ] assertBytesEq :: ByteString -> ByteString -> Bool