@@ -155,6 +155,54 @@ satisfy =
155155 predicate = (>= mid_value)
156156
157157-- Sequence Parsers Tests
158+takeBetweenPass :: Property
159+takeBetweenPass =
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
169+
170+takeBetween :: Property
171+takeBetween =
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 ->
175+ let
176+ list_length = Prelude.length ls
177+ in
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
181+ then
182+ let lpl = Prelude.length parsed_list
183+ in checkListEqual parsed_list (Prelude.take
184+ lpl ls)
185+ else property False
186+ Left _ -> property (m > n || list_length < m)
187+
188+
189+-- takeBetween :: Property
190+-- takeBetween =
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 ->
194+-- let
195+-- list_length = Prelude.length ls
196+-- in
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
200+-- then
201+-- let lpl = Prelude.length parsed_list
202+-- in checkListEqual parsed_list (Prelude.take
203+-- lpl ls)
204+-- else property False
205+-- Left _ -> property (m > n || list_length < m)
158206
159207takeEQPass :: Property
160208takeEQPass =
@@ -634,6 +682,11 @@ main =
634682 prop "check first element exists and satisfies predicate" satisfy
635683
636684 describe "test for sequence parser" $ do
685+ prop "P.takeBetween = Prelude.take when len >= m and len <= n"
686+ takeBetweenPass
687+ prop ("P.takeBetween = Prelude.take when len >= m and len <= n and fail"
688+ ++ "otherwise fail") Main.takeBetween
689+
637690 prop "P.takeEQ = Prelude.take when len >= n" takeEQPass
638691 prop "P.takeEQ = Prelude.take when len >= n and fail otherwise" Main.takeEQ
639692 prop "P.takeGE n ls = ls when len >= n" takeGEPass