on master help sign in
Add S.intercalate along with List.intercalate in seq splitting tests
commit92ff130caf9966b2e30776a0a84bfb2d2a5ea6d4 authoradithyaov <adithya@composewell.com> dateThu 5 Nov 2020, 22:09 (6 years ago) parentd644962
1 file changed+109−2
test/Streamly/Test/Prelude/Serial.hs+109−2
test/Streamly/Test/Prelude/Serial.hs+109−2
@@ -113,47 +113,77 @@ seqSplitterProperties ::
113113 -> String
114114 -> Spec
115115seqSplitterProperties sep desc = do
116− describe (desc <> " splitOnSeq/intercalate")
116+ describe (desc <> " splitOnSeq")
117117 $ do
118118 -- Empty seperator
119119 intercalateSplitEqId 0
120+ intercalateSplitEqIdS 0
120121 concatSplitIntercalateEqConcat splitOnSeq_ intercalate 0
122+ concatSplitIntercalateEqConcatS splitOnSeq_ IS.intercalate 0
121123
122124 -- Single element seperator
123125 intercalateSplitEqId 1
126+ intercalateSplitEqIdS 1
124127 concatSplitIntercalateEqConcat splitOnSeq_ intercalate 1
128+ concatSplitIntercalateEqConcatS splitOnSeq_ IS.intercalate 1
125129
126130 -- Shift Or
127131 intercalateSplitEqId 2
132+ intercalateSplitEqIdS 2
128133 concatSplitIntercalateEqConcat splitOnSeq_ intercalate 2
134+ concatSplitIntercalateEqConcatS splitOnSeq_ IS.intercalate 2
129135
130136 -- Karp-Rabin
131137 intercalateSplitEqId 4
138+ intercalateSplitEqIdS 4
132139 concatSplitIntercalateEqConcat splitOnSeq_ intercalate 4
140+ concatSplitIntercalateEqConcatS splitOnSeq_ IS.intercalate 4
133141
134142 -- Exclusive case
135143 splitIntercalateEqId splitOnSeq_ intercalate
144+ splitIntercalateEqIdS splitOnSeq_ IS.intercalate
136145
137− describe (desc <> " splitOnSuffixSeq/intercalate")
146+ describe (desc <> " splitOnSuffixSeq")
138147 $ do
139148 -- Empty seperator
140149 intercalateSplitEqIdNoSepEnd 0
150+ intercalateSplitEqIdNoSepEndS 0
141151 concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 0
152+ concatSplitIntercalateEqConcatS
153+ splitOnSuffixSeq_
154+ IS.intercalateSuffix
155+ 0
142156
143157 -- Single element seperator
144158 intercalateSplitEqIdNoSepEnd 1
159+ intercalateSplitEqIdNoSepEndS 1
145160 concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 1
161+ concatSplitIntercalateEqConcatS
162+ splitOnSuffixSeq_
163+ IS.intercalateSuffix
164+ 1
146165
147166 -- Shift Or
148167 intercalateSplitEqIdNoSepEnd 2
168+ intercalateSplitEqIdNoSepEndS 2
149169 concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 2
170+ concatSplitIntercalateEqConcatS
171+ splitOnSuffixSeq_
172+ IS.intercalateSuffix
173+ 2
150174
151175 -- Karp-Rabin
152176 intercalateSplitEqIdNoSepEnd 4
177+ intercalateSplitEqIdNoSepEndS 4
153178 concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 4
179+ concatSplitIntercalateEqConcatS
180+ splitOnSuffixSeq_
181+ IS.intercalateSuffix
182+ 4
154183
155184 -- Exclusive case
156185 splitIntercalateEqId splitOnSuffixSeq_ intercalateSuffix
186+ splitIntercalateEqIdS splitOnSuffixSeq_ IS.intercalateSuffix
157187
158188 where
159189
@@ -196,6 +226,25 @@ seqSplitterProperties sep desc = do
196226 (intercalate (replicate i sep) ys)
197227 xs
198228
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+
199248 intercalateSplitEqIdNoSepEnd i =
200249 let name =
201250 "intercalate . splitOnSuffixSeq_ . (++ [x \\= sep]) == id ("
@@ -213,6 +262,26 @@ seqSplitterProperties sep desc = do
213262 (intercalate (replicate i sep) ys)
214263 xs
215264
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+
216285 concatSplitIntercalateEqConcat splitter intercalater i =
217286 let name =
218287 "concat . splitter . intercalater == "
@@ -228,6 +297,26 @@ seqSplitterProperties sep desc = do
228297 ys <- splitter xs (replicate i sep)
229298 listEquals (==) (concat ys) (concat xss)
230299
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+
231320 splitIntercalateEqId splitter intercalater =
232321 let name =
233322 "splitter . intercalater == id"
@@ -242,6 +331,24 @@ seqSplitterProperties sep desc = do
242331 ys <- splitter xs [sep]
243332 listEquals (==) ys xss
244333
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+
245352groupSplitOps :: String -> Spec
246353groupSplitOps desc = do
247354 -- splitting