@@ -8,13 +8,15 @@ import Control.Monad.Eff (Eff)
88import Control.Monad.Eff.Console (log , CONSOLE )
99import Control.Monad.Eff.Exception (EXCEPTION )
1010import Control.Monad.Eff.Random (RANDOM )
11+ import Data.NonEmpty ((:|))
1112import Data.Foldable (foldl , for_ , all )
1213import Data.Function (on )
1314import Data.List (List (Cons), groupBy , length , nubBy , singleton , sort , sortBy )
1415import Data.Maybe (Maybe (..), fromMaybe )
1516import Data.Tuple (Tuple (..), fst )
1617import Partial.Unsafe (unsafePartial )
1718import Test.QuickCheck ((<?>), (===), quickCheck , quickCheck' )
19+ import Test.QuickCheck.Gen (elements , oneOf )
1820import Test.QuickCheck.Arbitrary (class Arbitrary , arbitrary )
1921
2022newtype TestMap k v = TestMap (M.Map k v )
@@ -39,19 +41,7 @@ instance showSmallKey :: Show SmallKey where
3941 show J = " J"
4042
4143instance arbSmallKey :: Arbitrary SmallKey where
42- arbitrary = do
43- n <- arbitrary
44- pure case n of
45- _ | n < 0.1 -> A
46- _ | n < 0.2 -> B
47- _ | n < 0.3 -> C
48- _ | n < 0.4 -> D
49- _ | n < 0.5 -> E
50- _ | n < 0.6 -> F
51- _ | n < 0.7 -> G
52- _ | n < 0.8 -> H
53- _ | n < 0.9 -> I
54- _ -> J
44+ arbitrary = elements $ A :| [B , C , D , E , F , G , H , I , J ]
5545
5646data Instruction k v = Insert k v | Delete k
5747
@@ -60,16 +50,7 @@ instance showInstruction :: (Show k, Show v) => Show (Instruction k v) where
6050 show (Delete k) = " Delete (" <> show k <> " )"
6151
6252instance arbInstruction :: (Arbitrary k , Arbitrary v ) => Arbitrary (Instruction k v ) where
63- arbitrary = do
64- b <- arbitrary
65- case b of
66- true -> do
67- k <- arbitrary
68- v <- arbitrary
69- pure (Insert k v)
70- false -> do
71- k <- arbitrary
72- pure (Delete k)
53+ arbitrary = oneOf $ (Insert <$> arbitrary <*> arbitrary) :| [Delete <$> arbitrary]
7354
7455runInstructions :: forall k v . Ord k => List (Instruction k v ) -> M.Map k v -> M.Map k v
7556runInstructions instrs t0 = foldl step t0 instrs
0 commit comments