@@ -16,6 +16,7 @@ module QC.Common
16import Control.Applicative ((<$>), (<*>))
16import Control.Applicative ((<$>), (<*>))
17import Data.Char (isAlpha)
17import Data.Char (isAlpha)
18import Test.QuickCheck
18import Test.QuickCheck
19+import Test.QuickCheck.Unicode (shrinkChar, string)
19import qualified Data.ByteString as B
20import qualified Data.ByteString as B
20import qualified Data.ByteString.Lazy as BL
21import qualified Data.ByteString.Lazy as BL
21import qualified Data.Text as T
22import qualified Data.Text as T
@@ -55,29 +56,13 @@ repackBS_ = go . cycle
55 in h : go bs t
56 in h : go bs t
56 go _ _ = error "unpossible"
57 go _ _ = error "unpossible"
59−newtype Unicode = Unicode {fromUnicode :: Char}
61−valid :: Unicode -> Bool
62−valid (Unicode c) = c < '\55296' || '\57343' < c
64−instance Arbitrary Unicode where
65− arbitrary = fmap Unicode (oneof [arbitrary, arbitraryBoundedEnum]) `suchThat` valid
66− shrink = filter valid . map (Unicode . toEnum) . shrink . fromEnum . fromUnicode
68−packUnicode :: [Unicode] -> T.Text
69−packUnicode = T.pack . map fromUnicode
71−unpackUnicode :: T.Text -> [Unicode]
72−unpackUnicode = map Unicode . T.unpack
74instance Arbitrary T.Text where
59instance Arbitrary T.Text where
75− arbitrary = packUnicode <$> arbitrary
60+ arbitrary = T.pack <$> string
76− shrink = map packUnicode . shrink . unpackUnicode
61+ shrink = map T.pack . shrinkList shrinkChar . T.unpack
78instance Arbitrary TL.Text where
63instance Arbitrary TL.Text where
79− arbitrary = repackT <$> arbitrary <*> arbitrary
64+ arbitrary = TL.pack <$> string
80− shrink = map TL.fromChunks . shrink . TL.toChunks
65+ shrink = map TL.pack . shrinkList shrinkChar . TL.unpack
82repackT :: Repack -> T.Text -> TL.Text
67repackT :: Repack -> T.Text -> TL.Text
83repackT (NonEmpty bs) =
68repackT (NonEmpty bs) =