@@ -1,4 +1,4 @@
1−{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}
1+{-# LANGUAGE BangPatterns, FlexibleInstances, TypeSynonymInstances #-}
2{-# OPTIONS_GHC -fno-enable-rewrite-rules #-}
2{-# OPTIONS_GHC -fno-enable-rewrite-rules #-}
4import Test.QuickCheck
4import Test.QuickCheck
@@ -170,6 +170,21 @@ prop_T_reverse = L.reverse `eqP` (unpackS . T.reverse)
170prop_TL_reverse = L.reverse `eqP` (unpackS . TL.reverse)
170prop_TL_reverse = L.reverse `eqP` (unpackS . TL.reverse)
171prop_T_reverse_short n = L.reverse `eqP` (unpackS . S.reverse . shorten n . S.stream)
171prop_T_reverse_short n = L.reverse `eqP` (unpackS . S.reverse . shorten n . S.stream)
173+prop_T_replace s d = (L.intercalate d . split s) `eqP` (unpackS . T.replace (T.pack s) (T.pack d))
175+split :: (Eq a) => [a] -> [a] -> [[a]]
178+ | otherwise = go src0
181+ go src = search 0 src
183+ search !n [] = [src]
185+ | pat `L.isPrefixOf` s = take n src : go (drop l s)
186+ | otherwise = search (n+1) s'
173prop_T_foldl f z = L.foldl f z `eqP` (T.foldl f z)
188prop_T_foldl f z = L.foldl f z `eqP` (T.foldl f z)
174 where types = f :: Char -> Char -> Char
189 where types = f :: Char -> Char -> Char
175prop_TL_foldl f z = L.foldl f z `eqP` (TL.foldl f z)
190prop_TL_foldl f z = L.foldl f z `eqP` (TL.foldl f z)
@@ -443,6 +458,7 @@ tests = [
443 ("prop_T_reverse", mytest prop_T_reverse),
458 ("prop_T_reverse", mytest prop_T_reverse),
444 ("prop_TL_reverse", mytest prop_TL_reverse),
459 ("prop_TL_reverse", mytest prop_TL_reverse),
445 ("prop_T_reverse_short", mytest prop_T_reverse_short),
460 ("prop_T_reverse_short", mytest prop_T_reverse_short),
461+ ("prop_T_replace", mytest prop_T_replace),
447 ("prop_T_foldl", mytest prop_T_foldl),
463 ("prop_T_foldl", mytest prop_T_foldl),
448 ("prop_TL_foldl", mytest prop_TL_foldl),
464 ("prop_TL_foldl", mytest prop_TL_foldl),