@@ -31,6 +31,7 @@ import Test.Framework.Providers.QuickCheck2 (testProperty)
3131import Test.QuickCheck hiding ((.&.))
3232import Test.QuickCheck.Monadic
3333import Test.QuickCheck.Property (Property(..))
34+import Test.QuickCheck.Unicode (char)
3435import Tests.QuickCheckUtils
3536import Tests.Utils
3637import Text.Show.Functions ()
@@ -529,12 +530,19 @@ s_takeWhile p = L.takeWhile p `eqP` (unpackS . S.takeWhile p)
529530s_takeWhile_s p = L.takeWhile p `eqP` (unpackS . S.unstream . S.takeWhile p)
530531sf_takeWhile q p = (L.takeWhile p . L.filter q) `eqP`
531532 (unpackS . S.takeWhile p . S.filter q)
533+noMatch = do
534+ c <- char
535+ d <- suchThat char (/= c)
536+ return (c,d)
532537t_takeWhile p = L.takeWhile p `eqP` (unpackS . T.takeWhile p)
533538tl_takeWhile p = L.takeWhile p `eqP` (unpackS . TL.takeWhile p)
534539t_takeWhileEnd p = (L.reverse . L.takeWhile p . L.reverse) `eqP`
535540 (unpackS . T.takeWhileEnd p)
541+t_takeWhileEnd_null n = forAll noMatch $ \(c,d) -> T.null $
542+ T.takeWhileEnd (==d) (T.replicate n (T.singleton c))
536543tl_takeWhileEnd p = (L.reverse . L.takeWhile p . L.reverse) `eqP`
537544 (unpackS . TL.takeWhileEnd p)
545+ TL.takeWhileEnd (==d) (TL.replicate n (TL.singleton c))
538546s_dropWhile p = L.dropWhile p `eqP` (unpackS . S.dropWhile p)
539547s_dropWhile_s p = L.dropWhile p `eqP` (unpackS . S.unstream . S.dropWhile p)
540548sf_dropWhile q p = (L.dropWhile p . L.filter q) `eqP`
@@ -1164,6 +1172,7 @@ tests =
11641172 testProperty "t_takeWhile" t_takeWhile,
11651173 testProperty "tl_takeWhile" tl_takeWhile,
11661174 testProperty "t_takeWhileEnd" t_takeWhileEnd,
1175+ testProperty "t_takeWhileEnd_null" t_takeWhileEnd_null,
11671176 testProperty "tl_takeWhileEnd" tl_takeWhileEnd,
11681177 testProperty "sf_dropWhile" sf_dropWhile,
11691178 testProperty "s_dropWhile" s_dropWhile,