@@ -6,6 +6,7 @@ module QC.Text (tests) where
6import Control.Applicative ((<*>), (<$>))
6import Control.Applicative ((<*>), (<$>))
8import Data.Int (Int64)
8import Data.Int (Int64)
9+import Data.Word (Word8)
9import Prelude hiding (take, takeWhile)
10import Prelude hiding (take, takeWhile)
10import QC.Common (liftOp, parseT)
11import QC.Common (liftOp, parseT)
11import qualified QC.Text.FastSet as FastSet
12import qualified QC.Text.FastSet as FastSet
@@ -16,8 +17,10 @@ import Test.QuickCheck
16import qualified Data.Attoparsec.Text as P
17import qualified Data.Attoparsec.Text as P
17import qualified Data.Attoparsec.Text.Lazy as PL
18import qualified Data.Attoparsec.Text.Lazy as PL
18import qualified Data.Attoparsec.Text.FastSet as S
19import qualified Data.Attoparsec.Text.FastSet as S
20+import qualified Data.ByteString as BS
19import qualified Data.Char as Char
21import qualified Data.Char as Char
20import qualified Data.Text as T
22import qualified Data.Text as T
23+import qualified Data.Text.Encoding as TE
21import qualified Data.Text.Lazy as L
24import qualified Data.Text.Lazy as L
23-- Basic byte-level combinators.
26-- Basic byte-level combinators.
@@ -70,9 +73,12 @@ strings s t u =
70 === Just t'
73 === Just t'
71 where t' = toStrict t
74 where t' = toStrict t
76+-- | Note: "simple, and efficient" works for well formed input...
77+-- i.e. e.g. Latin1 texts
73−stringCI :: T.Text -> Property
78+stringCI :: [Word8] -> Property
74−stringCI s = P.parseOnly (P.stringCI fs) s === Right s
79+stringCI ws = P.parseOnly (P.stringCI fs) s === Right s
75 where fs = T.toCaseFold s
80 where fs = T.toCaseFold s
81+ s = TE.decodeLatin1 (BS.pack ws)
77asciiCI :: T.Text -> Gen Bool
83asciiCI :: T.Text -> Gen Bool
78asciiCI x =
84asciiCI x =
@@ -150,7 +156,9 @@ endOfLine s =
150 (c, fst <$> L.uncons s') === ('\r', Just '\n')
156 (c, fst <$> L.uncons s') === ('\r', Just '\n')
152scan :: L.Text -> Positive Int64 -> Property
158scan :: L.Text -> Positive Int64 -> Property
159+-- for some reason, if counterexample is removed, this test fails?
160+scan s (Positive k) = counterexample (show s)
153−scan s (Positive k) = parseT p s === Just (toStrict $ L.take k s)
161+ $ parseT p s === Just (toStrict $ L.take k s)
154 where p = P.scan k $ \ n _ ->
162 where p = P.scan k $ \ n _ ->
155 if n > 0 then let !n' = n - 1 in Just n' else Nothing
163 if n > 0 then let !n' = n - 1 in Just n' else Nothing