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