on master help sign in
Add S.intercalate along with List.intercalate in seq splitting tests
92ff130adithyaov
test/Streamly/Test/Prelude/Serial.hs+109−2
@@ -113,47 +113,77 @@ seqSplitterProperties ::
113 -> String
113 -> String
114 -> Spec
114 -> Spec
115seqSplitterProperties sep desc = do
115seqSplitterProperties sep desc = do
116− describe (desc <> " splitOnSeq/intercalate")
116+ describe (desc <> " splitOnSeq")
117 $ do
117 $ do
118 -- Empty seperator
118 -- Empty seperator
119 intercalateSplitEqId 0
119 intercalateSplitEqId 0
120+ intercalateSplitEqIdS 0
120 concatSplitIntercalateEqConcat splitOnSeq_ intercalate 0
121 concatSplitIntercalateEqConcat splitOnSeq_ intercalate 0
122+ concatSplitIntercalateEqConcatS splitOnSeq_ IS.intercalate 0
121
123
122 -- Single element seperator
124 -- Single element seperator
123 intercalateSplitEqId 1
125 intercalateSplitEqId 1
126+ intercalateSplitEqIdS 1
124 concatSplitIntercalateEqConcat splitOnSeq_ intercalate 1
127 concatSplitIntercalateEqConcat splitOnSeq_ intercalate 1
128+ concatSplitIntercalateEqConcatS splitOnSeq_ IS.intercalate 1
125
129
126 -- Shift Or
130 -- Shift Or
127 intercalateSplitEqId 2
131 intercalateSplitEqId 2
132+ intercalateSplitEqIdS 2
128 concatSplitIntercalateEqConcat splitOnSeq_ intercalate 2
133 concatSplitIntercalateEqConcat splitOnSeq_ intercalate 2
134+ concatSplitIntercalateEqConcatS splitOnSeq_ IS.intercalate 2
129
135
130 -- Karp-Rabin
136 -- Karp-Rabin
131 intercalateSplitEqId 4
137 intercalateSplitEqId 4
138+ intercalateSplitEqIdS 4
132 concatSplitIntercalateEqConcat splitOnSeq_ intercalate 4
139 concatSplitIntercalateEqConcat splitOnSeq_ intercalate 4
140+ concatSplitIntercalateEqConcatS splitOnSeq_ IS.intercalate 4
133
141
134 -- Exclusive case
142 -- Exclusive case
135 splitIntercalateEqId splitOnSeq_ intercalate
143 splitIntercalateEqId splitOnSeq_ intercalate
144+ splitIntercalateEqIdS splitOnSeq_ IS.intercalate
136
145
137− describe (desc <> " splitOnSuffixSeq/intercalate")
146+ describe (desc <> " splitOnSuffixSeq")
138 $ do
147 $ do
139 -- Empty seperator
148 -- Empty seperator
140 intercalateSplitEqIdNoSepEnd 0
149 intercalateSplitEqIdNoSepEnd 0
150+ intercalateSplitEqIdNoSepEndS 0
141 concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 0
151 concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 0
152+ concatSplitIntercalateEqConcatS
153+ splitOnSuffixSeq_
154+ IS.intercalateSuffix
155+ 0
142
156
143 -- Single element seperator
157 -- Single element seperator
144 intercalateSplitEqIdNoSepEnd 1
158 intercalateSplitEqIdNoSepEnd 1
159+ intercalateSplitEqIdNoSepEndS 1
145 concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 1
160 concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 1
161+ concatSplitIntercalateEqConcatS
162+ splitOnSuffixSeq_
163+ IS.intercalateSuffix
164+ 1
146
165
147 -- Shift Or
166 -- Shift Or
148 intercalateSplitEqIdNoSepEnd 2
167 intercalateSplitEqIdNoSepEnd 2
168+ intercalateSplitEqIdNoSepEndS 2
149 concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 2
169 concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 2
170+ concatSplitIntercalateEqConcatS
171+ splitOnSuffixSeq_
172+ IS.intercalateSuffix
173+ 2
150
174
151 -- Karp-Rabin
175 -- Karp-Rabin
152 intercalateSplitEqIdNoSepEnd 4
176 intercalateSplitEqIdNoSepEnd 4
177+ intercalateSplitEqIdNoSepEndS 4
153 concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 4
178 concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 4
179+ concatSplitIntercalateEqConcatS
180+ splitOnSuffixSeq_
181+ IS.intercalateSuffix
182+ 4
154
183
155 -- Exclusive case
184 -- Exclusive case
156 splitIntercalateEqId splitOnSuffixSeq_ intercalateSuffix
185 splitIntercalateEqId splitOnSuffixSeq_ intercalateSuffix
186+ splitIntercalateEqIdS splitOnSuffixSeq_ IS.intercalateSuffix
157
187
158 where
188 where
159
189
@@ -196,6 +226,25 @@ seqSplitterProperties sep desc = do
196 (intercalate (replicate i sep) ys)
226 (intercalate (replicate i sep) ys)
197 xs
227 xs
198
228
229+ intercalateSplitEqIdS i =
230+ let name =
231+ "S.intercalate . splitOnSeq == id ("
232+ <> show i <> " element separator)"
233+ in prop name
234+ $ forAll listWithSep
235+ $ \xs -> do
236+ withMaxSuccess maxTestCount
237+ $ monadicIO
238+ $ do
239+ ys <- splitOnSeq_ xs (replicate i sep)
240+ zs <-
241+ IS.toList
242+ $ IS.intercalate
243+ (replicate i sep)
244+ UF.fromList
245+ $ IS.fromList ys
246+ listEquals (==) zs xs
247+
199 intercalateSplitEqIdNoSepEnd i =
248 intercalateSplitEqIdNoSepEnd i =
200 let name =
249 let name =
201 "intercalate . splitOnSuffixSeq_ . (++ [x \\= sep]) == id ("
250 "intercalate . splitOnSuffixSeq_ . (++ [x \\= sep]) == id ("
@@ -213,6 +262,26 @@ seqSplitterProperties sep desc = do
213 (intercalate (replicate i sep) ys)
262 (intercalate (replicate i sep) ys)
214 xs
263 xs
215
264
265+ intercalateSplitEqIdNoSepEndS i =
266+ let name =
267+ "S.intercalate . splitOnSuffixSeq_ . (++ [x \\= sep]) == id ("
268+ <> show i <> " element separator)"
269+ in prop name
270+ $ forAll ((,) <$> listWithSep <*> nonSepElem)
271+ $ \(xs_, nonSep) -> do
272+ let xs = xs_ ++ [nonSep]
273+ withMaxSuccess maxTestCount
274+ $ monadicIO
275+ $ do
276+ ys <- splitOnSuffixSeq_ xs (replicate i sep)
277+ zs <-
278+ IS.toList
279+ $ IS.intercalate
280+ (replicate i sep)
281+ UF.fromList
282+ $ IS.fromList ys
283+ listEquals (==) zs xs
284+
216 concatSplitIntercalateEqConcat splitter intercalater i =
285 concatSplitIntercalateEqConcat splitter intercalater i =
217 let name =
286 let name =
218 "concat . splitter . intercalater == "
287 "concat . splitter . intercalater == "
@@ -228,6 +297,26 @@ seqSplitterProperties sep desc = do
228 ys <- splitter xs (replicate i sep)
297 ys <- splitter xs (replicate i sep)
229 listEquals (==) (concat ys) (concat xss)
298 listEquals (==) (concat ys) (concat xss)
230
299
300+ concatSplitIntercalateEqConcatS splitter intercalater i =
301+ let name =
302+ "concat . splitter . S.intercalater == "
303+ <> "concat ("
304+ <> show i <> " element separator/possibly empty list)"
305+ in prop name
306+ $ forAll listsWithoutSep
307+ $ \xss -> do
308+ withMaxSuccess maxTestCount
309+ $ monadicIO
310+ $ do
311+ xs <-
312+ S.toList
313+ $ intercalater
314+ (replicate i sep)
315+ UF.fromList
316+ $ S.fromList xss
317+ ys <- splitter xs (replicate i sep)
318+ listEquals (==) (concat ys) (concat xss)
319+
231 splitIntercalateEqId splitter intercalater =
320 splitIntercalateEqId splitter intercalater =
232 let name =
321 let name =
233 "splitter . intercalater == id"
322 "splitter . intercalater == id"
@@ -242,6 +331,24 @@ seqSplitterProperties sep desc = do
242 ys <- splitter xs [sep]
331 ys <- splitter xs [sep]
243 listEquals (==) ys xss
332 listEquals (==) ys xss
244
333
334+ splitIntercalateEqIdS splitter intercalater =
335+ let name =
336+ "splitter . intercalater == id"
337+ <> " (exclusive separator/non-empty list)"
338+ in prop name
339+ $ forAll listsWithoutSep1
340+ $ \xss -> do
341+ withMaxSuccess maxTestCount
342+ $ monadicIO
343+ $ do
344+ xs <-
345+ S.toList
346+ $ intercalater [sep] UF.fromList
347+ $ S.fromList xss
348+ ys <- splitter xs [sep]
349+ listEquals (==) ys xss
350+
351+
245groupSplitOps :: String -> Spec
352groupSplitOps :: String -> Spec
246groupSplitOps desc = do
353groupSplitOps desc = do
247 -- splitting
354 -- splitting