@@ -7,14 +7,6 @@
7module Tests.QuickCheckUtils
7module Tests.QuickCheckUtils
18 , unsquare
10 , unsquare
19 , smallArbitrary
11 , smallArbitrary
@@ -43,8 +35,6 @@ import Control.Applicative ((<$>))
43import Control.Arrow (first, (***))
35import Control.Arrow (first, (***))
44import Control.DeepSeq (NFData (..), deepseq)
36import Control.DeepSeq (NFData (..), deepseq)
45import Control.Exception (bracket)
37import Control.Exception (bracket)
46−import Data.Bits ((.&.))
47−import Data.Char (chr)
48import Data.String (IsString, fromString)
38import Data.String (IsString, fromString)
49import Data.Text.Foreign (I16)
39import Data.Text.Foreign (I16)
50import Data.Word (Word8, Word16)
40import Data.Word (Word8, Word16)
@@ -52,6 +42,7 @@ import Debug.Trace (trace)
52import System.Random (Random (..), RandomGen)
42import System.Random (Random (..), RandomGen)
53import Test.QuickCheck hiding (Small (..), (.&.))
43import Test.QuickCheck hiding (Small (..), (.&.))
54import Test.QuickCheck.Monadic (assert, monadicIO, run)
44import Test.QuickCheck.Monadic (assert, monadicIO, run)
45+import Test.QuickCheck.Unicode (string)
55import Tests.Utils
46import Tests.Utils
56import qualified Data.ByteString as B
47import qualified Data.ByteString as B
57import qualified Data.Text as T
48import qualified Data.Text as T
@@ -68,6 +59,9 @@ import Data.Int (Int64)
68import Data.Word (Word, Word64)
59import Data.Word (Word, Word64)
62+genUnicode :: IsString a => Gen a
63+genUnicode = fromString <$> string
71instance Random I16 where
65instance Random I16 where
72 randomR = integralRandomR
66 randomR = integralRandomR
73 random = randomR (minBound,maxBound)
67 random = randomR (minBound,maxBound)
@@ -98,71 +92,6 @@ instance Random Word64 where
98 random = randomR (minBound,maxBound)
92 random = randomR (minBound,maxBound)
101−genUnicode :: IsString a => Gen a
102−genUnicode = genUnicodeWith planes
104−genUnicodeWith :: IsString a => [Gen Int] -> Gen a
105−genUnicodeWith gens = fmap fromString string
107− string = sized $ \n ->
108− do k <- choose (0,n)
109− sequence [ char | _ <- [1..k] ]
111− excluding :: [a -> Bool] -> Gen a -> Gen a
112− excluding bad gen = loop
116− if or (map ($ x) bad)
120− reserved = [lowSurrogate, highSurrogate, noncharacter]
121− lowSurrogate c = c >= 0xDC00 && c <= 0xDFFF
122− highSurrogate c = c >= 0xD800 && c <= 0xDBFF
123− noncharacter c = masked == 0xFFFE || masked == 0xFFFF
125− masked = c .&. 0xFFFF
127− char = chr `fmap` excluding reserved (oneof gens)
130−ascii = choose (0,0x7F)
133−plane0 = choose (0xF0, 0xFFFF)
136−plane1 = oneof [ choose (0x10000, 0x10FFF)
137− , choose (0x11000, 0x11FFF)
138− , choose (0x12000, 0x12FFF)
139− , choose (0x13000, 0x13FFF)
140− , choose (0x1D000, 0x1DFFF)
141− , choose (0x1F000, 0x1FFFF)
145−plane2 = oneof [ choose (0x20000, 0x20FFF)
146− , choose (0x21000, 0x21FFF)
147− , choose (0x22000, 0x22FFF)
148− , choose (0x23000, 0x23FFF)
149− , choose (0x24000, 0x24FFF)
150− , choose (0x25000, 0x25FFF)
151− , choose (0x26000, 0x26FFF)
152− , choose (0x27000, 0x27FFF)
153− , choose (0x28000, 0x28FFF)
154− , choose (0x29000, 0x29FFF)
155− , choose (0x2A000, 0x2AFFF)
156− , choose (0x2B000, 0x2BFFF)
157− , choose (0x2F000, 0x2FFFF)
161−plane14 = choose (0xE0000, 0xE0FFF)
164−planes = [ascii, plane0, plane1, plane2, plane14]
166-- For tests that have O(n^2) running times or input sizes, resize
95-- For tests that have O(n^2) running times or input sizes, resize
167-- their inputs to the square root of the originals.
96-- their inputs to the square root of the originals.
168unsquare :: (Arbitrary a, Show a, Testable b) => (a -> b) -> Property
97unsquare :: (Arbitrary a, Show a, Testable b) => (a -> b) -> Property