@@ -155,6 +155,54 @@ satisfy =
155 predicate = (>= mid_value)
155 predicate = (>= mid_value)
157-- Sequence Parsers Tests
157-- Sequence Parsers Tests
158+takeBetweenPass :: Property
160+ forAll (chooseInt (min_value, max_value)) $ \m ->
161+ forAll (chooseInt (m, max_value)) $ \n ->
162+ forAll (chooseInt (m, max_value)) $ \list_length ->
163+ forAll (vectorOf list_length (chooseInt (min_value, max_value))) $ \ls ->
164+ case S.parse (P.takeBetween m n FL.toList) (S.fromList ls) of
165+ Right parsed_list ->
166+ let lpl = Prelude.length parsed_list
167+ in checkListEqual parsed_list (Prelude.take lpl ls)
168+ Left _ -> property False
170+takeBetween :: Property
172+ forAll (chooseInt (min_value, max_value)) $ \m ->
173+ forAll (chooseInt (min_value, max_value)) $ \n ->
174+ forAll (listOf(chooseInt (min_value, max_value))) $ \ls ->
176+ list_length = Prelude.length ls
178+ case S.parse (P.takeBetween m n FL.toList) (S.fromList ls) of
179+ Right parsed_list ->
180+ if m <= list_length && n >= list_length
182+ let lpl = Prelude.length parsed_list
183+ in checkListEqual parsed_list (Prelude.take
186+ Left _ -> property (m > n || list_length < m)
189+-- takeBetween :: Property
191+-- forAll (chooseInt (min_value, max_value)) $ \m ->
192+-- forAll (chooseInt (min_value, max_value)) $ \n ->
193+-- forAll (listOf (chooseInt (min_value, max_value))) $ \ls ->
195+-- list_length = Prelude.length ls
197+-- case S.parseD (P.takeBetween m n FL.toList) (S.fromList ls) of
198+-- Right parsed_list ->
199+-- if m <= list_length && n >= list_length
201+-- let lpl = Prelude.length parsed_list
202+-- in checkListEqual parsed_list (Prelude.take
204+-- else property False
205+-- Left _ -> property (m > n || list_length < m)
159takeEQPass :: Property
207takeEQPass :: Property
160takeEQPass =
208takeEQPass =
@@ -634,6 +682,11 @@ main =
634 prop "check first element exists and satisfies predicate" satisfy
682 prop "check first element exists and satisfies predicate" satisfy
636 describe "test for sequence parser" $ do
684 describe "test for sequence parser" $ do
685+ prop "P.takeBetween = Prelude.take when len >= m and len <= n"
687+ prop ("P.takeBetween = Prelude.take when len >= m and len <= n and fail"
688+ ++ "otherwise fail") Main.takeBetween
637 prop "P.takeEQ = Prelude.take when len >= n" takeEQPass
690 prop "P.takeEQ = Prelude.take when len >= n" takeEQPass
638 prop "P.takeEQ = Prelude.take when len >= n and fail otherwise" Main.takeEQ
691 prop "P.takeEQ = Prelude.take when len >= n and fail otherwise" Main.takeEQ
639 prop "P.takeGE n ls = ls when len >= n" takeGEPass
692 prop "P.takeGE n ls = ls when len >= n" takeGEPass