From d6564d56ca042fc68fe18bdb95f0e8362156e909 Mon Sep 17 00:00:00 2001 From: SeanRBurton Date: Sun, 7 Dec 2014 22:51:16 +0000 Subject: [PATCH 1/2] Update FastSet.hs --- Data/Attoparsec/Text/FastSet.hs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Data/Attoparsec/Text/FastSet.hs b/Data/Attoparsec/Text/FastSet.hs index 12d14586..0290233b 100644 --- a/Data/Attoparsec/Text/FastSet.hs +++ b/Data/Attoparsec/Text/FastSet.hs @@ -32,7 +32,7 @@ module Data.Attoparsec.Text.FastSet import Data.Bits ((.|.), (.&.), shiftR) import Data.Function (on) -import Data.List (sort, sortBy, foldl') +import Data.List (sort, sortBy) import qualified Data.Array.Base as AB import qualified Data.Array.Unboxed as A import qualified Data.Text as T @@ -92,8 +92,12 @@ fromList s = FastSet (AB.listArray (0, length interleaved - 1) interleaved) entries ordNub :: Eq a => [a] -> [a] -ordNub [] = [] -ordNub (x:xs) = foldl' (\ys@(y:_) z -> if y == z then ys else z:ys) [x] xs +ordNub [] = [] +ordNub (y:ys) = go y ys + where go x (z:zs) + | x == z = go x zs + | otherwise = x : go z zs + go x [] = [x] set :: T.Text -> FastSet set = fromList . T.unpack From a773af430438e27ec99e063ad4e608181a2da631 Mon Sep 17 00:00:00 2001 From: SeanRBurton Date: Sun, 7 Dec 2014 22:52:04 +0000 Subject: [PATCH 2/2] Update Common.hs --- tests/QC/Common.hs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/tests/QC/Common.hs b/tests/QC/Common.hs index 3685fa7c..dde42410 100644 --- a/tests/QC/Common.hs +++ b/tests/QC/Common.hs @@ -54,12 +54,30 @@ repackBS_ = go . cycle | otherwise = let (h,t) = B.splitAt b s in h : go bs t go _ _ = error "unpossible" + + +newtype Unicode = Unicode {fromUnicode :: Char} + +valid :: Unicode -> Bool +valid (Unicode c) = c < '\55296' || '\57343' < c + +instance Arbitrary Unicode where + arbitrary = fmap Unicode (oneof [arbitrary, arbitraryBoundedEnum]) `suchThat` valid + shrink = filter valid . map (Unicode . toEnum) . shrink . fromEnum . fromUnicode + +packUnicode :: [Unicode] -> T.Text +packUnicode = T.pack . map fromUnicode + +unpackUnicode :: T.Text -> [Unicode] +unpackUnicode = map Unicode . T.unpack instance Arbitrary T.Text where - arbitrary = T.pack <$> arbitrary + arbitrary = packUnicode <$> arbitrary + shrink = map packUnicode . shrink . unpackUnicode instance Arbitrary TL.Text where arbitrary = repackT <$> arbitrary <*> arbitrary + shrink = map TL.fromChunks . shrink . TL.toChunks repackT :: Repack -> T.Text -> TL.Text repackT (NonEmpty bs) =