@@ -20,6 +20,8 @@ module Streamly.Test.Prelude.Common
2020 , constructWithIterateM
2121 , constructWithFromIndices
2222 , constructWithFromIndicesM
23+ , constructWithCons
24+ , constructWithConsM
2325 -- * Applicative operations
2426 , applicativeOps
2527 , applicativeOps1
@@ -251,6 +253,39 @@ constructWithFromIndicesM op len =
251253 streamEffect <- run $ readIORef mvl
252254 listEquals (==) streamEffect list
253255
256+constructWithCons ::
257+ IsStream t
258+ => (Int -> t IO Int -> t IO Int)
259+ -> (t IO Int -> SerialT IO Int)
260+ -> Word8
261+ -> Property
262+constructWithCons cons op len =
263+ withMaxSuccess maxTestCount $
264+ monadicIO $ do
265+ strm <-
266+ run $
267+ S.toList . op . S.take (fromIntegral len) $
268+ foldr cons S.nil (repeat 0)
269+ let list = replicate (fromIntegral len) 0
270+ listEquals (==) strm list
271+
272+constructWithConsM ::
273+ IsStream t
274+ => (IO Int -> t IO Int -> t IO Int)
275+ -> ([Int] -> [Int])
276+ -> (t IO Int -> SerialT IO Int)
277+ -> Word8
278+ -> Property
279+constructWithConsM consM listT op len =
280+ withMaxSuccess maxTestCount $
281+ monadicIO $ do
282+ strm <-
283+ run $
284+ S.toList . op . S.take (fromIntegral len) $
285+ foldr consM S.nil (repeat (return 0))
286+ let list = replicate (fromIntegral len) 0
287+ listEquals (==) (listT strm) list
288+
254289-------------------------------------------------------------------------------
255290-- Applicative operations
256291-------------------------------------------------------------------------------