@@ -107,16 +107,18 @@ splitOnSuffixSeq = do
108 $ IS.splitOnSuffixSeq (A.fromList pat) FL.toList (S.fromList xs)
108 $ IS.splitOnSuffixSeq (A.fromList pat) FL.toList (S.fromList xs)
110−seqSplitterProperties ::
110+splitterProperties ::
111 forall a. (Arbitrary a, Eq a, Show a, Storable a, Enum a)
111 forall a. (Arbitrary a, Eq a, Show a, Storable a, Enum a)
113 -> String
113 -> String
115−seqSplitterProperties sep desc = do
115+splitterProperties sep desc = do
116 describe (desc <> " splitOnSeq")
116 describe (desc <> " splitOnSeq")
119− forM_ [0, 1, 2, 4] intercalateSplitEqId
119+ forM_ [0, 1, 2, 4]
120+ $ intercalateSplitEqId splitOnSeq_ intercalate IS.intercalate
120 forM_ [0, 1, 2, 4]
122 forM_ [0, 1, 2, 4]
121 $ concatSplitIntercalateEqConcat
123 $ concatSplitIntercalateEqConcat
122 splitOnSeq_
124 splitOnSeq_
@@ -126,10 +128,26 @@ seqSplitterProperties sep desc = do
126 -- Exclusive case
128 -- Exclusive case
127 splitIntercalateEqId splitOnSeq_ intercalate IS.intercalate
129 splitIntercalateEqId splitOnSeq_ intercalate IS.intercalate
131+ describe (desc <> " splitOn")
134+ intercalateSplitEqId splitOn_ intercalate IS.intercalate 1
136+ concatSplitIntercalateEqConcat
137+ splitOn_ intercalate IS.intercalate 1
140+ splitIntercalateEqId splitOn_ intercalate IS.intercalate
129 describe (desc <> " splitOnSuffixSeq")
142 describe (desc <> " splitOnSuffixSeq")
132− forM_ [0, 1, 2, 4] intercalateSplitEqIdNoSepEnd
146+ $ intercalateSplitEqIdNoSepEnd
133 forM_ [0, 1, 2, 4]
151 forM_ [0, 1, 2, 4]
134 $ concatSplitIntercalateEqConcat
152 $ concatSplitIntercalateEqConcat
135 splitOnSuffixSeq_
153 splitOnSuffixSeq_
@@ -142,6 +160,19 @@ seqSplitterProperties sep desc = do
142 intercalateSuffix
160 intercalateSuffix
143 IS.intercalateSuffix
161 IS.intercalateSuffix
163+ describe (desc <> " splitOnSuffix")
166+ intercalateSplitEqIdNoSepEnd
167+ splitOnSuffix_ intercalate IS.intercalate 1
169+ concatSplitIntercalateEqConcat
170+ splitOnSuffix_ intercalateSuffix IS.intercalateSuffix 1
173+ splitIntercalateEqId
174+ splitOnSuffix_ intercalateSuffix IS.intercalateSuffix
147 splitOnSeq_ xs ys =
178 splitOnSeq_ xs ys =
@@ -150,6 +181,12 @@ seqSplitterProperties sep desc = do
150 splitOnSuffixSeq_ xs ys =
181 splitOnSuffixSeq_ xs ys =
151 S.toList $ IS.splitOnSuffixSeq (A.fromList ys) FL.toList (S.fromList xs)
182 S.toList $ IS.splitOnSuffixSeq (A.fromList ys) FL.toList (S.fromList xs)
185+ S.toList $ IS.splitOn (== (head ys)) FL.toList (S.fromList xs)
187+ splitOnSuffix_ xs ys =
188+ S.toList $ IS.splitOnSuffix (== (head ys)) FL.toList (S.fromList xs)
153 intercalateSuffix xs yss = intercalate xs yss ++ xs
190 intercalateSuffix xs yss = intercalate xs yss ++ xs
155 nonSepElem :: Gen a
192 nonSepElem :: Gen a
@@ -167,9 +204,9 @@ seqSplitterProperties sep desc = do
167 listsWithoutSep1 :: Gen [[a]]
204 listsWithoutSep1 :: Gen [[a]]
168 listsWithoutSep1 = listOf1 listWithoutSep
205 listsWithoutSep1 = listOf1 listWithoutSep
170− intercalateSplitEqId i =
207+ intercalateSplitEqId splitter lIntercalater sIntercalater i =
171 let name =
208 let name =
172− "intercalate . splitOnSeq == id ("
209+ "intercalater . splitter == id ("
173 <> show i <> " element separator)"
210 <> show i <> " element separator)"
174 in prop name
211 in prop name
175 $ forAll listWithSep
212 $ forAll listWithSep
@@ -178,18 +215,18 @@ seqSplitterProperties sep desc = do
180 testCase xs = do
217 testCase xs = do
181− ys <- splitOnSeq_ xs (replicate i sep)
218+ ys <- splitter xs (replicate i sep)
183 IS.toList
220 IS.toList
184− $ IS.intercalate (replicate i sep) UF.fromList
221+ $ sIntercalater (replicate i sep) UF.fromList
185 $ IS.fromList ys
222 $ IS.fromList ys
186− let lzs = intercalate (replicate i sep) ys
223+ let lzs = lIntercalater (replicate i sep) ys
187 listEquals (==) szs xs
224 listEquals (==) szs xs
188 listEquals (==) lzs xs
225 listEquals (==) lzs xs
190− intercalateSplitEqIdNoSepEnd i =
227+ intercalateSplitEqIdNoSepEnd splitter lIntercalater sIntercalater i =
191 let name =
228 let name =
192− "intercalate . splitOnSuffixSeq_ . (++ [x \\= sep]) == id ("
229+ "intercalater . splitter . (++ [x \\= sep]) == id ("
193 <> show i <> " element separator)"
230 <> show i <> " element separator)"
194 in prop name
231 in prop name
195 $ forAll ((,) <$> listWithSep <*> nonSepElem)
232 $ forAll ((,) <$> listWithSep <*> nonSepElem)
@@ -200,16 +237,16 @@ seqSplitterProperties sep desc = do
202 testCase xs = do
239 testCase xs = do
203− ys <- splitOnSuffixSeq_ xs (replicate i sep)
240+ ys <- splitter xs (replicate i sep)
205 IS.toList
242 IS.toList
206− $ IS.intercalate (replicate i sep) UF.fromList
243+ $ sIntercalater (replicate i sep) UF.fromList
207 $ IS.fromList ys
244 $ IS.fromList ys
208− let lzs = intercalate (replicate i sep) ys
245+ let lzs = lIntercalater (replicate i sep) ys
209 listEquals (==) szs xs
246 listEquals (==) szs xs
210 listEquals (==) lzs xs
247 listEquals (==) lzs xs
212− concatSplitIntercalateEqConcat splitter lintercalater sintercalater i =
249+ concatSplitIntercalateEqConcat splitter lIntercalater sIntercalater i =
213 let name =
250 let name =
214 "concat . splitter . S.intercalater == "
251 "concat . splitter . S.intercalater == "
215 <> "concat ("
252 <> "concat ("
@@ -221,17 +258,17 @@ seqSplitterProperties sep desc = do
223 testCase xss = do
260 testCase xss = do
224− let lxs = lintercalater (replicate i sep) xss
261+ let lxs = lIntercalater (replicate i sep) xss
225 lys <- splitter lxs (replicate i sep)
262 lys <- splitter lxs (replicate i sep)
228− $ sintercalater (replicate i sep) UF.fromList
265+ $ sIntercalater (replicate i sep) UF.fromList
229 $ S.fromList xss
266 $ S.fromList xss
230 sys <- splitter sxs (replicate i sep)
267 sys <- splitter sxs (replicate i sep)
231 listEquals (==) (concat lys) (concat xss)
268 listEquals (==) (concat lys) (concat xss)
232 listEquals (==) (concat sys) (concat xss)
269 listEquals (==) (concat sys) (concat xss)
234− splitIntercalateEqId splitter lintercalater sintercalater =
271+ splitIntercalateEqId splitter lIntercalater sIntercalater =
235 let name =
272 let name =
236 "splitter . intercalater == id"
273 "splitter . intercalater == id"
237 <> " (exclusive separator/non-empty list)"
274 <> " (exclusive separator/non-empty list)"
@@ -243,9 +280,9 @@ seqSplitterProperties sep desc = do
245 testCase xss = do
282 testCase xss = do
246− let lxs = lintercalater [sep] xss
283+ let lxs = lIntercalater [sep] xss
247 lys <- splitter lxs [sep]
284 lys <- splitter lxs [sep]
248− sxs <- S.toList $ sintercalater [sep] UF.fromList $ S.fromList xss
285+ sxs <- S.toList $ sIntercalater [sep] UF.fromList $ S.fromList xss
249 sys <- splitter sxs [sep]
286 sys <- splitter sxs [sep]
250 listEquals (==) lys xss
287 listEquals (==) lys xss
251 listEquals (==) sys xss
288 listEquals (==) sys xss
@@ -257,10 +294,10 @@ groupSplitOps desc = do
257 splitOnSeq
294 splitOnSeq
258 splitOnSuffixSeq
295 splitOnSuffixSeq
260− -- seq splitting
297+ -- splitting properties
261− seqSplitterProperties (0 :: Int) desc
298+ splitterProperties (0 :: Int) desc
262 -- XXX This will fail
299 -- XXX This will fail
263− -- seqSplitterProperties (0 :: Word8) desc
300+ -- splitterProperties (0 :: Word8) desc
265 prop (desc <> " intercalate [x] . splitOn (== x) == id") $
302 prop (desc <> " intercalate [x] . splitOn (== x) == id") $
266 forAll listWithZeroes $ \xs -> do
303 forAll listWithZeroes $ \xs -> do