@@ -1,25 +1,28 @@
11module Main (main) where
22
33import Data.Word (Word8)
4−import qualified Data.Attoparsec.FastSet as F
5−import System.Random (Random(..), RandomGen)
4+import qualified Data.Attoparsec.ByteString.FastSet as F
5+import qualified Data.Attoparsec.Text.FastSet as F
66import Test.QuickCheck
77
8−integralRandomR :: (Integral a, RandomGen g) => (a, a) -> g -> (a, g)
9−integralRandomR (a,b) g = case randomR (fromIntegral a :: Int,
10− fromIntegral b :: Int) g
11− of (x,g') -> (fromIntegral x, g')
12−
13−instance Random Word8 where
14− randomR = integralRandomR
15− random = randomR (minBound,maxBound)
16−
17−instance Arbitrary Word8 where
18− arbitrary = choose (minBound, maxBound)
19−
20−prop_AllMembers s =
8+prop_members s =
219 let set = F.fromList s
2210 in all (`F.memberWord8` set) s
23−
11+
12+prop_nonmembers s s' =
13+ let set = F.fromList s
14+ in not . any (`F.memberWord8` set) $ filter (not . (`elem` s)) s'
15+
16+prop_membersText s =
17+ let set = F.fromList s
18+ in all (`FT.member` set) s
19+
20+prop_nonmembersText s s' =
21+ let set = FT.fromList s
22+ in not . any (`FT.member` set) $ filter (not . (`elem` s)) s'
23+
2424main = do
25− quickCheck prop_AllMembers
25+ quickCheck prop_members
26+ quickCheck prop_nonmembers
27+ quickCheck prop_membersText
28+ quickCheck prop_nonmembersText