@@ -7,6 +7,14 @@
77module Tests.QuickCheckUtils
88 (
99 genUnicode
10+ , genUnicodeWith
11+ , ascii
12+ , plane0
13+ , plane1
14+ , plane2
15+ , plane14
16+ , planes
17+
1018 , unsquare
1119 , smallArbitrary
1220
@@ -72,7 +80,11 @@ instance Random Word8 where
7280#endif
7381
7482genUnicode :: IsString a => Gen a
75−genUnicode = fmap fromString string where
83+genUnicode = genUnicodeWith planes
84+
85+genUnicodeWith :: IsString a => [Gen Int] -> Gen a
86+genUnicodeWith gens = fmap fromString string
87+ where
7688 string = sized $ \n ->
7789 do k <- choose (0,n)
7890 sequence [ char | _ <- [1..k] ]
@@ -93,33 +105,44 @@ genUnicode = fmap fromString string where
93105 where
94106 masked = c .&. 0xFFFF
95107
96− ascii = choose (0,0x7F)
97− plane0 = choose (0xF0, 0xFFFF)
98− plane1 = oneof [ choose (0x10000, 0x10FFF)
99− , choose (0x11000, 0x11FFF)
100− , choose (0x12000, 0x12FFF)
101− , choose (0x13000, 0x13FFF)
102− , choose (0x1D000, 0x1DFFF)
103− , choose (0x1F000, 0x1FFFF)
104− ]
105− plane2 = oneof [ choose (0x20000, 0x20FFF)
106− , choose (0x21000, 0x21FFF)
107− , choose (0x22000, 0x22FFF)
108− , choose (0x23000, 0x23FFF)
109− , choose (0x24000, 0x24FFF)
110− , choose (0x25000, 0x25FFF)
111− , choose (0x26000, 0x26FFF)
112− , choose (0x27000, 0x27FFF)
113− , choose (0x28000, 0x28FFF)
114− , choose (0x29000, 0x29FFF)
115− , choose (0x2A000, 0x2AFFF)
116− , choose (0x2B000, 0x2BFFF)
117− , choose (0x2F000, 0x2FFFF)
118− ]
119− plane14 = choose (0xE0000, 0xE0FFF)
120− planes = [ascii, plane0, plane1, plane2, plane14]
121−
122− char = chr `fmap` excluding reserved (oneof planes)
108+ char = chr `fmap` excluding reserved (oneof gens)
109+
110+ascii :: Gen Int
111+ascii = choose (0,0x7F)
112+
113+plane0 :: Gen Int
114+plane0 = choose (0xF0, 0xFFFF)
115+
116+plane1 :: Gen Int
117+plane1 = oneof [ choose (0x10000, 0x10FFF)
118+ , choose (0x11000, 0x11FFF)
119+ , choose (0x12000, 0x12FFF)
120+ , choose (0x13000, 0x13FFF)
121+ , choose (0x1D000, 0x1DFFF)
122+ , choose (0x1F000, 0x1FFFF)
123+ ]
124+
125+plane2 :: Gen Int
126+plane2 = oneof [ choose (0x20000, 0x20FFF)
127+ , choose (0x21000, 0x21FFF)
128+ , choose (0x22000, 0x22FFF)
129+ , choose (0x23000, 0x23FFF)
130+ , choose (0x24000, 0x24FFF)
131+ , choose (0x25000, 0x25FFF)
132+ , choose (0x26000, 0x26FFF)
133+ , choose (0x27000, 0x27FFF)
134+ , choose (0x28000, 0x28FFF)
135+ , choose (0x29000, 0x29FFF)
136+ , choose (0x2A000, 0x2AFFF)
137+ , choose (0x2B000, 0x2BFFF)
138+ , choose (0x2F000, 0x2FFFF)
139+ ]
140+
141+plane14 :: Gen Int
142+plane14 = choose (0xE0000, 0xE0FFF)
143+
144+planes :: [Gen Int]
145+planes = [ascii, plane0, plane1, plane2, plane14]
123146
124147-- For tests that have O(n^2) running times or input sizes, resize
125148-- their inputs to the square root of the originals.