@@ -107,16 +107,18 @@ splitOnSuffixSeq = do
107107 S.toList
108108 $ IS.splitOnSuffixSeq (A.fromList pat) FL.toList (S.fromList xs)
109109
110−seqSplitterProperties ::
110+splitterProperties ::
111111 forall a. (Arbitrary a, Eq a, Show a, Storable a, Enum a)
112112 => a
113113 -> String
114114 -> Spec
115−seqSplitterProperties sep desc = do
115+splitterProperties sep desc = do
116116 describe (desc <> " splitOnSeq")
117117 $ do
118118
119− forM_ [0, 1, 2, 4] intercalateSplitEqId
119+ forM_ [0, 1, 2, 4]
120+ $ intercalateSplitEqId splitOnSeq_ intercalate IS.intercalate
121+
120122 forM_ [0, 1, 2, 4]
121123 $ concatSplitIntercalateEqConcat
122124 splitOnSeq_
@@ -126,10 +128,26 @@ seqSplitterProperties sep desc = do
126128 -- Exclusive case
127129 splitIntercalateEqId splitOnSeq_ intercalate IS.intercalate
128130
131+ describe (desc <> " splitOn")
132+ $ do
133+
134+ intercalateSplitEqId splitOn_ intercalate IS.intercalate 1
135+
136+ concatSplitIntercalateEqConcat
137+ splitOn_ intercalate IS.intercalate 1
138+
139+ -- Exclusive case
140+ splitIntercalateEqId splitOn_ intercalate IS.intercalate
141+
129142 describe (desc <> " splitOnSuffixSeq")
130143 $ do
131144
132− forM_ [0, 1, 2, 4] intercalateSplitEqIdNoSepEnd
145+ forM_ [0, 1, 2, 4]
146+ $ intercalateSplitEqIdNoSepEnd
147+ splitOnSuffixSeq_
148+ intercalate
149+ IS.intercalate
150+
133151 forM_ [0, 1, 2, 4]
134152 $ concatSplitIntercalateEqConcat
135153 splitOnSuffixSeq_
@@ -142,6 +160,19 @@ seqSplitterProperties sep desc = do
142160 intercalateSuffix
143161 IS.intercalateSuffix
144162
163+ describe (desc <> " splitOnSuffix")
164+ $ do
165+
166+ intercalateSplitEqIdNoSepEnd
167+ splitOnSuffix_ intercalate IS.intercalate 1
168+
169+ concatSplitIntercalateEqConcat
170+ splitOnSuffix_ intercalateSuffix IS.intercalateSuffix 1
171+
172+ -- Exclusive case
173+ splitIntercalateEqId
174+ splitOnSuffix_ intercalateSuffix IS.intercalateSuffix
175+
145176 where
146177
147178 splitOnSeq_ xs ys =
@@ -150,6 +181,12 @@ seqSplitterProperties sep desc = do
150181 splitOnSuffixSeq_ xs ys =
151182 S.toList $ IS.splitOnSuffixSeq (A.fromList ys) FL.toList (S.fromList xs)
152183
184+ splitOn_ xs ys =
185+ S.toList $ IS.splitOn (== (head ys)) FL.toList (S.fromList xs)
186+
187+ splitOnSuffix_ xs ys =
188+ S.toList $ IS.splitOnSuffix (== (head ys)) FL.toList (S.fromList xs)
189+
153190 intercalateSuffix xs yss = intercalate xs yss ++ xs
154191
155192 nonSepElem :: Gen a
@@ -167,9 +204,9 @@ seqSplitterProperties sep desc = do
167204 listsWithoutSep1 :: Gen [[a]]
168205 listsWithoutSep1 = listOf1 listWithoutSep
169206
170− intercalateSplitEqId i =
207+ intercalateSplitEqId splitter lIntercalater sIntercalater i =
171208 let name =
172− "intercalate . splitOnSeq == id ("
209+ "intercalater . splitter == id ("
173210 <> show i <> " element separator)"
174211 in prop name
175212 $ forAll listWithSep
@@ -178,18 +215,18 @@ seqSplitterProperties sep desc = do
178215 where
179216
180217 testCase xs = do
181− ys <- splitOnSeq_ xs (replicate i sep)
218+ ys <- splitter xs (replicate i sep)
182219 szs <-
183220 IS.toList
184− $ IS.intercalate (replicate i sep) UF.fromList
221+ $ sIntercalater (replicate i sep) UF.fromList
185222 $ IS.fromList ys
186− let lzs = intercalate (replicate i sep) ys
223+ let lzs = lIntercalater (replicate i sep) ys
187224 listEquals (==) szs xs
188225 listEquals (==) lzs xs
189226
190− intercalateSplitEqIdNoSepEnd i =
227+ intercalateSplitEqIdNoSepEnd splitter lIntercalater sIntercalater i =
191228 let name =
192− "intercalate . splitOnSuffixSeq_ . (++ [x \\= sep]) == id ("
229+ "intercalater . splitter . (++ [x \\= sep]) == id ("
193230 <> show i <> " element separator)"
194231 in prop name
195232 $ forAll ((,) <$> listWithSep <*> nonSepElem)
@@ -200,16 +237,16 @@ seqSplitterProperties sep desc = do
200237 where
201238
202239 testCase xs = do
203− ys <- splitOnSuffixSeq_ xs (replicate i sep)
240+ ys <- splitter xs (replicate i sep)
204241 szs <-
205242 IS.toList
206− $ IS.intercalate (replicate i sep) UF.fromList
243+ $ sIntercalater (replicate i sep) UF.fromList
207244 $ IS.fromList ys
208− let lzs = intercalate (replicate i sep) ys
245+ let lzs = lIntercalater (replicate i sep) ys
209246 listEquals (==) szs xs
210247 listEquals (==) lzs xs
211248
212− concatSplitIntercalateEqConcat splitter lintercalater sintercalater i =
249+ concatSplitIntercalateEqConcat splitter lIntercalater sIntercalater i =
213250 let name =
214251 "concat . splitter . S.intercalater == "
215252 <> "concat ("
@@ -221,17 +258,17 @@ seqSplitterProperties sep desc = do
221258 where
222259
223260 testCase xss = do
224− let lxs = lintercalater (replicate i sep) xss
261+ let lxs = lIntercalater (replicate i sep) xss
225262 lys <- splitter lxs (replicate i sep)
226263 sxs <-
227264 S.toList
228− $ sintercalater (replicate i sep) UF.fromList
265+ $ sIntercalater (replicate i sep) UF.fromList
229266 $ S.fromList xss
230267 sys <- splitter sxs (replicate i sep)
231268 listEquals (==) (concat lys) (concat xss)
232269 listEquals (==) (concat sys) (concat xss)
233270
234− splitIntercalateEqId splitter lintercalater sintercalater =
271+ splitIntercalateEqId splitter lIntercalater sIntercalater =
235272 let name =
236273 "splitter . intercalater == id"
237274 <> " (exclusive separator/non-empty list)"
@@ -243,9 +280,9 @@ seqSplitterProperties sep desc = do
243280 where
244281
245282 testCase xss = do
246− let lxs = lintercalater [sep] xss
283+ let lxs = lIntercalater [sep] xss
247284 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
249286 sys <- splitter sxs [sep]
250287 listEquals (==) lys xss
251288 listEquals (==) sys xss
@@ -257,10 +294,10 @@ groupSplitOps desc = do
257294 splitOnSeq
258295 splitOnSuffixSeq
259296
260− -- seq splitting
261− seqSplitterProperties (0 :: Int) desc
297+ -- splitting properties
298+ splitterProperties (0 :: Int) desc
262299 -- XXX This will fail
263− -- seqSplitterProperties (0 :: Word8) desc
300+ -- splitterProperties (0 :: Word8) desc
264301
265302 prop (desc <> " intercalate [x] . splitOn (== x) == id") $
266303 forAll listWithZeroes $ \xs -> do