text 1.2.0.2 → 1.2.0.3
raw patch · 8 files changed
+117/−21 lines, 8 files
Files
- Data/Text.hs +18/−7
- Data/Text/Internal/Builder/RealFloat/Functions.hs +28/−0
- Data/Text/Lazy.hs +18/−8
- Data/Text/Lazy/Encoding.hs +0/−2
- changelog.md +5/−0
- tests/Tests/Properties.hs +18/−2
- tests/Tests/QuickCheckUtils.hs +29/−1
- text.cabal +1/−1
Data/Text.hs view
@@ -689,10 +689,14 @@ -- -- In (unlikely) bad cases, this function's time complexity degrades -- towards /O(n*m)/.-replace :: Text -- ^ @needle@ to search for- -> Text -- ^ @replacement@ to replace @needle@ with- -> Text -- ^ @haystack@ in which to search+replace :: Text+ -- ^ @needle@ to search for. If this string is empty, an+ -- error will occur. -> Text+ -- ^ @replacement@ to replace @needle@ with.+ -> Text+ -- ^ @haystack@ in which to search.+ -> Text replace needle@(Text _ _ neeLen) (Text repArr repOff repLen) haystack@(Text hayArr hayOff hayLen)@@ -1299,9 +1303,9 @@ -- copies to create substrings; they just construct new 'Text's that -- are slices of the original. --- | /O(m+n)/ Break a 'Text' into pieces separated by the first--- 'Text' argument, consuming the delimiter. An empty delimiter is--- invalid, and will cause an error to be raised.+-- | /O(m+n)/ Break a 'Text' into pieces separated by the first 'Text'+-- argument (which cannot be empty), consuming the delimiter. An empty+-- delimiter is invalid, and will cause an error to be raised. -- -- Examples: --@@ -1314,9 +1318,16 @@ -- > intercalate s . splitOn s == id -- > splitOn (singleton c) == split (==c) --+-- (Note: the string @s@ to split on above cannot be empty.)+-- -- In (unlikely) bad cases, this function's time complexity degrades -- towards /O(n*m)/.-splitOn :: Text -> Text -> [Text]+splitOn :: Text+ -- ^ String to split on. If this string is empty, an error+ -- will occur.+ -> Text+ -- ^ Input text.+ -> [Text] splitOn pat@(Text _ _ l) src@(Text arr off len) | l <= 0 = emptyError "splitOn" | isSingleton pat = split (== unsafeHead pat) src
Data/Text/Internal/Builder/RealFloat/Functions.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE CPP #-}+ -- | -- Module: Data.Text.Internal.Builder.RealFloat.Functions -- Copyright: (c) The University of Glasgow 1994-2002@@ -13,7 +15,31 @@ ) where roundTo :: Int -> [Int] -> (Int,[Int])++#if MIN_VERSION_base(4,6,0)+ roundTo d is =+ case f d True is of+ x@(0,_) -> x+ (1,xs) -> (1, 1:xs)+ _ -> error "roundTo: bad Value"+ where+ b2 = base `quot` 2++ f n _ [] = (0, replicate n 0)+ f 0 e (x:xs) | x == b2 && e && all (== 0) xs = (0, []) -- Round to even when at exactly half the base+ | otherwise = (if x >= b2 then 1 else 0, [])+ f n _ (i:xs)+ | i' == base = (1,0:ds)+ | otherwise = (0,i':ds)+ where+ (c,ds) = f (n-1) (even i) xs+ i' = c + i+ base = 10++#else++roundTo d is = case f d is of x@(0,_) -> x (1,xs) -> (1, 1:xs)@@ -27,3 +53,5 @@ where (c,ds) = f (n-1) xs i' = c + i++#endif
Data/Text/Lazy.hs view
@@ -686,10 +686,14 @@ -- -- In (unlikely) bad cases, this function's time complexity degrades -- towards /O(n*m)/.-replace :: Text -- ^ Text to search for- -> Text -- ^ Replacement text- -> Text -- ^ Input text+replace :: Text+ -- ^ @needle@ to search for. If this string is empty, an+ -- error will occur. -> Text+ -- ^ @replacement@ to replace @needle@ with.+ -> Text+ -- ^ @haystack@ in which to search.+ -> Text replace s d = intercalate d . splitOn s {-# INLINE replace #-} @@ -1299,9 +1303,10 @@ -- copies to create substrings; they just construct new 'Text's that -- are slices of the original. --- | /O(m+n)/ Break a 'Text' into pieces separated by the first--- 'Text' argument, consuming the delimiter. An empty delimiter is--- invalid, and will cause an error to be raised.+-- | /O(m+n)/ Break a 'Text' into pieces separated by the first 'Text'+-- argument (which cannot be an empty string), consuming the+-- delimiter. An empty delimiter is invalid, and will cause an error+-- to be raised. -- -- Examples: --@@ -1314,13 +1319,18 @@ -- > intercalate s . splitOn s == id -- > splitOn (singleton c) == split (==c) --+-- (Note: the string @s@ to split on above cannot be empty.)+-- -- This function is strict in its first argument, and lazy in its -- second. -- -- In (unlikely) bad cases, this function's time complexity degrades -- towards /O(n*m)/.-splitOn :: Text -- ^ Text to split on- -> Text -- ^ Input text+splitOn :: Text+ -- ^ String to split on. If this string is empty, an error+ -- will occur.+ -> Text+ -- ^ Input text. -> [Text] splitOn pat src | null pat = emptyError "splitOn"
Data/Text/Lazy/Encoding.hs view
@@ -89,8 +89,6 @@ -- | /Deprecated/. Decode a 'ByteString' containing 7-bit ASCII -- encoded text.------ This function is deprecated. Use 'decodeLatin1' instead. decodeASCII :: B.ByteString -> Text decodeASCII = decodeUtf8 {-# DEPRECATED decodeASCII "Use decodeUtf8 instead" #-}
changelog.md view
@@ -1,3 +1,8 @@+1.2.0.3++* Update formatRealFloat to correspond to the definition in versions+ of base newer than 4.5 (https://github.com/bos/text/issues/105)+ 1.2.0.2 * Bumped lower bound on deepseq to 1.4 for compatibility with the
tests/Tests/Properties.hs view
@@ -24,7 +24,7 @@ import Data.Text.Lazy.Read as TL import Data.Text.Read as T import Data.Word (Word, Word8, Word16, Word32, Word64)-import Numeric (showHex)+import Numeric (showEFloat, showFFloat, showGFloat, showHex) import Prelude hiding (replicate) import Test.Framework (Test, testGroup) import Test.Framework.Providers.QuickCheck2 (testProperty)@@ -779,6 +779,20 @@ tb_realfloat_float (a::Float) = tb_realfloat a tb_realfloat_double (a::Double) = tb_realfloat a +showFloat :: (RealFloat a) => TB.FPFormat -> Maybe Int -> a -> ShowS+showFloat TB.Exponent = showEFloat+showFloat TB.Fixed = showFFloat+showFloat TB.Generic = showGFloat++tb_formatRealFloat :: (RealFloat a, Show a) => a -> TB.FPFormat -> Precision a -> Property+tb_formatRealFloat a fmt prec =+ TB.formatRealFloat fmt p a ===+ TB.fromString (showFloat fmt p a "")+ where p = precision a prec++tb_formatRealFloat_float (a::Float) = tb_formatRealFloat a+tb_formatRealFloat_double (a::Double) = tb_formatRealFloat a+ -- Reading. t_decimal (n::Int) s =@@ -1284,7 +1298,9 @@ ], testGroup "realfloat" [ testProperty "tb_realfloat_double" tb_realfloat_double,- testProperty "tb_realfloat_float" tb_realfloat_float+ testProperty "tb_realfloat_float" tb_realfloat_float,+ testProperty "tb_formatRealFloat_float" tb_formatRealFloat_float,+ testProperty "tb_formatRealFloat_double" tb_formatRealFloat_double ], testProperty "tb_fromText" tb_fromText, testProperty "tb_singleton" tb_singleton
tests/Tests/QuickCheckUtils.hs view
@@ -17,6 +17,9 @@ , Small (..) , small + , Precision(..)+ , precision+ , integralRandomR , DecodeErr (..)@@ -37,10 +40,11 @@ import Control.Exception (bracket) import Data.String (IsString, fromString) import Data.Text.Foreign (I16)+import Data.Text.Lazy.Builder.RealFloat (FPFormat(..)) import Data.Word (Word8, Word16) import Debug.Trace (trace) import System.Random (Random (..), RandomGen)-import Test.QuickCheck hiding (Small (..), (.&.))+import Test.QuickCheck hiding (Fixed(..), Small (..), (.&.)) import Test.QuickCheck.Monadic (assert, monadicIO, run) import Test.QuickCheck.Unicode (string) import Tests.Utils@@ -262,6 +266,30 @@ eql d a b | a =^= b = True | otherwise = trace (d ++ ": " ++ show a ++ " /= " ++ show b) False++instance Arbitrary FPFormat where+ arbitrary = elements [Exponent, Fixed, Generic]++newtype Precision a = Precision (Maybe Int)+ deriving (Eq, Show)++precision :: a -> Precision a -> Maybe Int+precision _ (Precision prec) = prec++arbitraryPrecision :: Int -> Gen (Precision a)+arbitraryPrecision maxDigits = Precision <$> do+ n <- choose (-1,maxDigits)+ return $ if n == -1+ then Nothing+ else Just n++instance Arbitrary (Precision Float) where+ arbitrary = arbitraryPrecision 11+ shrink = map Precision . shrink . precision undefined++instance Arbitrary (Precision Double) where+ arbitrary = arbitraryPrecision 22+ shrink = map Precision . shrink . precision undefined -- Work around lack of Show instance for TextEncoding. data Encoding = E String IO.TextEncoding
text.cabal view
@@ -1,5 +1,5 @@ name: text-version: 1.2.0.2+version: 1.2.0.3 homepage: https://github.com/bos/text bug-reports: https://github.com/bos/text/issues synopsis: An efficient packed Unicode text type.