on master help sign in
Extract Unicode test code into its own package
commit9722f0e502b527fad4f54242225c108545fee325 authorBryan O'Sullivan <bos@serpentine.com> dateFri 5 Dec 2014, 13:21 (12 years ago) parent231bc1f
3 files changed+6−75
tests/Tests/QuickCheckUtils.hs+4−75 tests/text-tests.cabal+1 text.cabal+1
tests/Tests/QuickCheckUtils.hs+4−75
@@ -7,14 +7,6 @@
77module Tests.QuickCheckUtils
88 (
99 genUnicode
10− , genUnicodeWith
11− , ascii
12− , plane0
13− , plane1
14− , plane2
15− , plane14
16− , planes
17−
1810 , unsquare
1911 , smallArbitrary
2012
@@ -43,8 +35,6 @@ import Control.Applicative ((<$>))
4335import Control.Arrow (first, (***))
4436import Control.DeepSeq (NFData (..), deepseq)
4537import Control.Exception (bracket)
46−import Data.Bits ((.&.))
47−import Data.Char (chr)
4838import Data.String (IsString, fromString)
4939import Data.Text.Foreign (I16)
5040import Data.Word (Word8, Word16)
@@ -52,6 +42,7 @@ import Debug.Trace (trace)
5242import System.Random (Random (..), RandomGen)
5343import Test.QuickCheck hiding (Small (..), (.&.))
5444import Test.QuickCheck.Monadic (assert, monadicIO, run)
45+import Test.QuickCheck.Unicode (string)
5546import Tests.Utils
5647import qualified Data.ByteString as B
5748import qualified Data.Text as T
@@ -68,6 +59,9 @@ import Data.Int (Int64)
6859import Data.Word (Word, Word64)
6960#endif
7061
62+genUnicode :: IsString a => Gen a
63+genUnicode = fromString <$> string
64+
7165instance Random I16 where
7266 randomR = integralRandomR
7367 random = randomR (minBound,maxBound)
@@ -98,71 +92,6 @@ instance Random Word64 where
9892 random = randomR (minBound,maxBound)
9993#endif
10094
101−genUnicode :: IsString a => Gen a
102−genUnicode = genUnicodeWith planes
103−
104−genUnicodeWith :: IsString a => [Gen Int] -> Gen a
105−genUnicodeWith gens = fmap fromString string
106− where
107− string = sized $ \n ->
108− do k <- choose (0,n)
109− sequence [ char | _ <- [1..k] ]
110−
111− excluding :: [a -> Bool] -> Gen a -> Gen a
112− excluding bad gen = loop
113− where
114− loop = do
115− x <- gen
116− if or (map ($ x) bad)
117− then loop
118− else return x
119−
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
124− where
125− masked = c .&. 0xFFFF
126−
127− char = chr `fmap` excluding reserved (oneof gens)
128−
129−ascii :: Gen Int
130−ascii = choose (0,0x7F)
131−
132−plane0 :: Gen Int
133−plane0 = choose (0xF0, 0xFFFF)
134−
135−plane1 :: Gen Int
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)
142− ]
143−
144−plane2 :: Gen Int
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)
158− ]
159−
160−plane14 :: Gen Int
161−plane14 = choose (0xE0000, 0xE0FFF)
162−
163−planes :: [Gen Int]
164−planes = [ascii, plane0, plane1, plane2, plane14]
165−
16695-- For tests that have O(n^2) running times or input sizes, resize
16796-- their inputs to the square root of the originals.
16897unsquare :: (Arbitrary a, Show a, Testable b) => (a -> b) -> Property
tests/text-tests.cabal+1
@@ -51,6 +51,7 @@ executable text-tests
5151 bytestring,
5252 deepseq,
5353 directory,
54+ quickcheck-unicode,
5455 random,
5556 test-framework >= 0.4,
5657 test-framework-hunit >= 0.2,
text.cabal+1
@@ -169,6 +169,7 @@ test-suite tests
169169 deepseq,
170170 directory,
171171 ghc-prim,
172+ quickcheck-unicode,
172173 random,
173174 test-framework >= 0.4,
174175 test-framework-hunit >= 0.2,