@@ -1,8 +1,9 @@
1−{-# LANGUAGE CPP #-}
1+{-# LANGUAGE CPP, FlexibleInstances #-}
22{-# OPTIONS_GHC -fno-warn-orphans #-}
33module QC.Common
44 (
5− parseBS
5+ ASCII(..)
6+ , parseBS
67 , parseT
78 , toLazyBS
89 , toStrictBS
@@ -48,6 +49,17 @@ instance Arbitrary BL.ByteString where
4849 arbitrary = repackBS <$> arbitrary <*> arbitrary
4950 shrink = map BL.pack . shrink . BL.unpack
5051
52+newtype ASCII a = ASCII { fromASCII :: a }
53+ deriving (Eq, Ord, Show)
54+
55+instance Arbitrary (ASCII B.ByteString) where
56+ arbitrary = (ASCII . B.pack) <$> listOf (choose (0,127))
57+ shrink = map (ASCII . B.pack) . shrink . B.unpack . fromASCII
58+
59+instance Arbitrary (ASCII BL.ByteString) where
60+ arbitrary = ASCII <$> (repackBS <$> arbitrary <*> (fromASCII <$> arbitrary))
61+ shrink = map (ASCII . BL.pack) . shrink . BL.unpack . fromASCII
62+
5163type Repack = NonEmptyList (Positive (Small Int))
5264
5365repackBS :: Repack -> B.ByteString -> BL.ByteString