on master help sign in
Rename functions and make structural adjustments in Prelude.Serial
commit2ae488776b8bd4a2c0fa55204dafb14f69336552 authoradithyaov <adithya@composewell.com> dateFri 6 Nov 2020, 02:26 (6 years ago) parent92ff130
1 file changed+73−171
test/Streamly/Test/Prelude/Serial.hs+73−171
test/Streamly/Test/Prelude/Serial.hs+73−171
@@ -10,7 +10,7 @@
1010module Streamly.Test.Prelude.Serial where
1111
1212import Control.Concurrent ( threadDelay )
13−import Control.Monad ( when )
13+import Control.Monad ( when, forM_ )
1414import Data.Function ( (&) )
1515import Data.IORef ( newIORef, readIORef, writeIORef )
1616import Data.Int (Int64)
@@ -115,75 +115,32 @@ seqSplitterProperties ::
115115seqSplitterProperties sep desc = do
116116 describe (desc <> " splitOnSeq")
117117 $ do
118− -- Empty seperator
119− intercalateSplitEqId 0
120− intercalateSplitEqIdS 0
121− concatSplitIntercalateEqConcat splitOnSeq_ intercalate 0
122− concatSplitIntercalateEqConcatS splitOnSeq_ IS.intercalate 0
123−
124− -- Single element seperator
125− intercalateSplitEqId 1
126− intercalateSplitEqIdS 1
127− concatSplitIntercalateEqConcat splitOnSeq_ intercalate 1
128− concatSplitIntercalateEqConcatS splitOnSeq_ IS.intercalate 1
129−
130− -- Shift Or
131− intercalateSplitEqId 2
132− intercalateSplitEqIdS 2
133− concatSplitIntercalateEqConcat splitOnSeq_ intercalate 2
134− concatSplitIntercalateEqConcatS splitOnSeq_ IS.intercalate 2
135−
136− -- Karp-Rabin
137− intercalateSplitEqId 4
138− intercalateSplitEqIdS 4
139− concatSplitIntercalateEqConcat splitOnSeq_ intercalate 4
140− concatSplitIntercalateEqConcatS splitOnSeq_ IS.intercalate 4
118+
119+ forM_ [0, 1, 2, 4] $ intercalateSplitEqId
120+ forM_ [0, 1, 2, 4]
121+ $ concatSplitIntercalateEqConcat
122+ splitOnSeq_
123+ intercalate
124+ IS.intercalate
141125
142126 -- Exclusive case
143− splitIntercalateEqId splitOnSeq_ intercalate
144− splitIntercalateEqIdS splitOnSeq_ IS.intercalate
127+ splitIntercalateEqId splitOnSeq_ intercalate IS.intercalate
145128
146129 describe (desc <> " splitOnSuffixSeq")
147130 $ do
148− -- Empty seperator
149− intercalateSplitEqIdNoSepEnd 0
150− intercalateSplitEqIdNoSepEndS 0
151− concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 0
152− concatSplitIntercalateEqConcatS
153− splitOnSuffixSeq_
154− IS.intercalateSuffix
155− 0
156131
157− -- Single element seperator
158− intercalateSplitEqIdNoSepEnd 1
159− intercalateSplitEqIdNoSepEndS 1
160− concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 1
161− concatSplitIntercalateEqConcatS
162− splitOnSuffixSeq_
163− IS.intercalateSuffix
164− 1
132+ forM_ [0, 1, 2, 4] $ intercalateSplitEqIdNoSepEnd
133+ forM_ [0, 1, 2, 4]
134+ $ concatSplitIntercalateEqConcat
135+ splitOnSuffixSeq_
136+ intercalateSuffix
137+ IS.intercalateSuffix
165138
166− -- Shift Or
167− intercalateSplitEqIdNoSepEnd 2
168− intercalateSplitEqIdNoSepEndS 2
169− concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 2
170− concatSplitIntercalateEqConcatS
171− splitOnSuffixSeq_
172− IS.intercalateSuffix
173− 2
174−
175− -- Karp-Rabin
176− intercalateSplitEqIdNoSepEnd 4
177− intercalateSplitEqIdNoSepEndS 4
178− concatSplitIntercalateEqConcat splitOnSuffixSeq_ intercalateSuffix 4
179− concatSplitIntercalateEqConcatS
139+ -- Exclusive case
140+ splitIntercalateEqId
180141 splitOnSuffixSeq_
142+ intercalateSuffix
181143 IS.intercalateSuffix
182− 4
183−
184− -- Exclusive case
185− splitIntercalateEqId splitOnSuffixSeq_ intercalateSuffix
186− splitIntercalateEqIdS splitOnSuffixSeq_ IS.intercalateSuffix
187144
188145 where
189146
@@ -216,34 +173,19 @@ seqSplitterProperties sep desc = do
216173 <> show i <> " element separator)"
217174 in prop name
218175 $ forAll listWithSep
219− $ \xs -> do
220− withMaxSuccess maxTestCount
221− $ monadicIO
222− $ do
223− ys <- splitOnSeq_ xs (replicate i sep)
224− listEquals
225− (==)
226− (intercalate (replicate i sep) ys)
227− xs
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
176+ $ \xs -> withMaxSuccess maxTestCount $ monadicIO $ testCase xs
177+
178+ where
179+
180+ testCase xs = do
181+ ys <- splitOnSeq_ xs (replicate i sep)
182+ szs <-
183+ IS.toList
184+ $ IS.intercalate (replicate i sep) UF.fromList
185+ $ IS.fromList ys
186+ let lzs = intercalate (replicate i sep) ys
187+ listEquals (==) szs xs
188+ listEquals (==) lzs xs
247189
248190 intercalateSplitEqIdNoSepEnd i =
249191 let name =
@@ -253,100 +195,60 @@ seqSplitterProperties sep desc = do
253195 $ forAll ((,) <$> listWithSep <*> nonSepElem)
254196 $ \(xs_, nonSep) -> do
255197 let xs = xs_ ++ [nonSep]
256− withMaxSuccess maxTestCount
257− $ monadicIO
258− $ do
259− ys <- splitOnSuffixSeq_ xs (replicate i sep)
260− listEquals
261− (==)
262− (intercalate (replicate i sep) ys)
263− xs
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−
285− concatSplitIntercalateEqConcat splitter intercalater i =
286− let name =
287− "concat . splitter . intercalater == "
288− <> "concat ("
289− <> show i <> " element separator/possibly empty list)"
290− in prop name
291− $ forAll listsWithoutSep
292− $ \xss -> do
293− withMaxSuccess maxTestCount
294− $ monadicIO
295− $ do
296− let xs = intercalater (replicate i sep) xss
297− ys <- splitter xs (replicate i sep)
298− listEquals (==) (concat ys) (concat xss)
299−
300− concatSplitIntercalateEqConcatS splitter intercalater i =
198+ withMaxSuccess maxTestCount $ monadicIO $ testCase xs
199+
200+ where
201+
202+ testCase xs = do
203+ ys <- splitOnSuffixSeq_ xs (replicate i sep)
204+ szs <-
205+ IS.toList
206+ $ IS.intercalate (replicate i sep) UF.fromList
207+ $ IS.fromList ys
208+ let lzs = intercalate (replicate i sep) ys
209+ listEquals (==) szs xs
210+ listEquals (==) lzs xs
211+
212+ concatSplitIntercalateEqConcat splitter lintercalater sintercalater i =
301213 let name =
302214 "concat . splitter . S.intercalater == "
303215 <> "concat ("
304216 <> show i <> " element separator/possibly empty list)"
305217 in prop name
306218 $ 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−
320− splitIntercalateEqId splitter intercalater =
321− let name =
322− "splitter . intercalater == id"
323− <> " (exclusive separator/non-empty list)"
324− in prop name
325− $ forAll listsWithoutSep1
326− $ \xss -> do
327− withMaxSuccess maxTestCount
328− $ monadicIO
329− $ do
330− let xs = intercalater [sep] xss
331− ys <- splitter xs [sep]
332− listEquals (==) ys xss
333−
334− splitIntercalateEqIdS splitter intercalater =
219+ $ \xss -> withMaxSuccess maxTestCount $ monadicIO $ testCase xss
220+
221+ where
222+
223+ testCase xss = do
224+ let lxs = lintercalater (replicate i sep) xss
225+ lys <- splitter lxs (replicate i sep)
226+ sxs <-
227+ S.toList
228+ $ sintercalater (replicate i sep) UF.fromList
229+ $ S.fromList xss
230+ sys <- splitter sxs (replicate i sep)
231+ listEquals (==) (concat lys) (concat xss)
232+ listEquals (==) (concat sys) (concat xss)
233+
234+ splitIntercalateEqId splitter lintercalater sintercalater =
335235 let name =
336236 "splitter . intercalater == id"
337237 <> " (exclusive separator/non-empty list)"
338238 in prop name
339239 $ forAll listsWithoutSep1
340240 $ \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
241+ withMaxSuccess maxTestCount $ monadicIO $ testCase xss
242+
243+ where
244+
245+ testCase xss = do
246+ let lxs = lintercalater [sep] xss
247+ lys <- splitter lxs [sep]
248+ sxs <- S.toList $ sintercalater [sep] UF.fromList $ S.fromList xss
249+ sys <- splitter sxs [sep]
250+ listEquals (==) lys xss
251+ listEquals (==) sys xss
350252
351253
352254groupSplitOps :: String -> Spec