@@ -124,7 +124,7 @@ import GHC.Word (Word8)
124import System.Mem (performMajorGC)
124import System.Mem (performMajorGC)
125import Test.Hspec.QuickCheck
125import Test.Hspec.QuickCheck
126import Test.Hspec
126import Test.Hspec
127−import Test.QuickCheck (Property, choose, forAll, withMaxSuccess)
127+import Test.QuickCheck (Property, choose, forAll, listOf, withMaxSuccess)
128import Test.QuickCheck.Monadic (assert, monadicIO, run)
128import Test.QuickCheck.Monadic (assert, monadicIO, run)
130import Streamly.Prelude (SerialT, IsStream, (.:), nil, (|&), fromSerial)
130import Streamly.Prelude (SerialT, IsStream, (.:), nil, (|&), fromSerial)
@@ -134,6 +134,7 @@ import Streamly.Prelude (avgRate, rate, maxBuffer, maxThreads)
134import qualified Streamly.Prelude as S
134import qualified Streamly.Prelude as S
135import qualified Streamly.Data.Fold as FL
135import qualified Streamly.Data.Fold as FL
136import qualified Streamly.Internal.Data.Stream.IsStream as S
136import qualified Streamly.Internal.Data.Stream.IsStream as S
137+import qualified Streamly.Internal.Data.Stream.IsStream.Common as IS
137import qualified Streamly.Internal.Data.Unfold as UF
138import qualified Streamly.Internal.Data.Unfold as UF
139import qualified Data.Map.Strict as Map
140import qualified Data.Map.Strict as Map
@@ -1074,6 +1075,13 @@ transformCombineFromList constr eq listOp t op a b c =
1074 let list = a <> listOp (b <> c)
1075 let list = a <> listOp (b <> c)
1075 listEquals eq stream list
1076 listEquals eq stream list
1078+takeEndBy :: Property
1079+takeEndBy = forAll (listOf (chooseInt (0, maxStreamLen))) $ \lst -> monadicIO $ do
1080+ let (s1, s3) = span (<= 200) lst
1081+ let s4 = [head s3 | not (null s3)]
1082+ s2 <- run $ S.toList $ IS.takeEndBy (> 200) $ S.fromList lst
1083+ assert $ s1 ++ s4 == s2
1077-- XXX add tests for MonadReader and MonadError etc. In case an SVar is
1085-- XXX add tests for MonadReader and MonadError etc. In case an SVar is
1078-- accidentally passed through them.
1086-- accidentally passed through them.
@@ -1120,6 +1128,8 @@ transformCombineOpsCommon constr desc eq t = do
1120 prop (desc <> " takeWhileM False") $
1128 prop (desc <> " takeWhileM False") $
1121 transform (takeWhile (const False)) t (S.takeWhileM (const $ return False))
1129 transform (takeWhile (const False)) t (S.takeWhileM (const $ return False))
1131+ prop "takeEndBy" takeEndBy
1123 prop (desc <> " drop maxBound") $
1133 prop (desc <> " drop maxBound") $
1124 transform (drop maxBound) t (S.drop maxBound)
1134 transform (drop maxBound) t (S.drop maxBound)
1125 prop (desc <> " drop 0") $ transform (drop 0) t (S.drop 0)
1135 prop (desc <> " drop 0") $ transform (drop 0) t (S.drop 0)