Skip to content

Commit bbac52d

Browse files
committed
Add sanity tests for parseMany and parseIterate
1 parent 3c4e847 commit bbac52d

1 file changed

Lines changed: 23 additions & 0 deletions

File tree

test/Streamly/Test/Data/Parser.hs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1378,6 +1378,15 @@ expectedResult moves inp = go 0 0 [] moves
13781378
P.Done n () -> (Right ys, slice_ (max (i - n + 1) j) inp)
13791379
P.Error err -> (Left (ParseError err), slice_ j inp)
13801380

1381+
expectedResultMany :: [Move] -> [Int] -> [Either ParseError [Int]]
1382+
expectedResultMany _ [] = []
1383+
expectedResultMany moves inp =
1384+
let (res, rest) = expectedResult moves inp
1385+
in
1386+
case res of
1387+
Left err -> [Left err]
1388+
Right val -> Right val : expectedResultMany moves rest
1389+
13811390
createPaths :: [a] -> [[a]]
13821391
createPaths xs =
13831392
Prelude.map (flip Prelude.take xs) [1..length xs]
@@ -1485,6 +1494,18 @@ sanityParseBreakChunksK jumps = it (show jumps) $ do
14851494
lst <- Prelude.map A.toList <$> K.toList rest
14861495
(val, concat lst) `shouldBe` (expectedResult jumps tape)
14871496

1497+
sanityParseMany :: [Move] -> SpecWith ()
1498+
sanityParseMany jumps = it (show jumps) $ do
1499+
res <- S.toList $ SI.parseMany (jumpParser jumps) $ S.fromList tape
1500+
res `shouldBe` (expectedResultMany jumps tape)
1501+
1502+
sanityParseIterate :: [Move] -> SpecWith ()
1503+
sanityParseIterate jumps = it (show jumps) $ do
1504+
res <-
1505+
S.toList
1506+
$ SI.parseIterate (const (jumpParser jumps)) [] $ S.fromList tape
1507+
res `shouldBe` (expectedResultMany jumps tape)
1508+
14881509
-------------------------------------------------------------------------------
14891510
-- Main
14901511
-------------------------------------------------------------------------------
@@ -1501,6 +1522,8 @@ main =
15011522
parserSanityTests "Stream.parseBreak" sanityParseBreak
15021523
parserSanityTests "StreamK.parseDBreak" sanityParseDBreak
15031524
parserSanityTests "A.sanityParseBreakChunksK" sanityParseBreakChunksK
1525+
parserSanityTests "Stream.parseMany" sanityParseMany
1526+
parserSanityTests "Stream.parseIterate" sanityParseIterate
15041527
describe "Instances" $ do
15051528
prop "applicative" applicative
15061529
prop "Alternative: end of input 1" altEOF1

0 commit comments

Comments
 (0)