Skip to content

Commit 5e80026

Browse files
committed
An Arbitrary instance for the unified Update type
1 parent 081628f commit 5e80026

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

src-extras/Database/LSMTree/Extras/Generators.hs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import Data.List (sort)
4646
import qualified Data.Primitive.ByteArray as BA
4747
import qualified Data.Vector.Primitive as VP
4848
import Data.Word
49+
import qualified Database.LSMTree as Unified
4950
import Database.LSMTree.Common (Range (..))
5051
import Database.LSMTree.Extras
5152
import Database.LSMTree.Extras.Index (Append (..))
@@ -75,6 +76,25 @@ import Test.QuickCheck.Instances ()
7576
Common LSMTree types
7677
-------------------------------------------------------------------------------}
7778

79+
instance (Arbitrary v, Arbitrary blob) => Arbitrary (Unified.Update v blob) where
80+
arbitrary = QC.arbitrary2
81+
shrink = QC.shrink2
82+
83+
instance Arbitrary2 Unified.Update where
84+
liftArbitrary2 genVal genBlob = frequency
85+
[ (10, Unified.Insert <$> genVal <*> liftArbitrary genBlob)
86+
, (5, Unified.Mupsert <$> genVal)
87+
, (1, pure Unified.Delete)
88+
]
89+
90+
liftShrink2 shrinkVal shrinkBlob = \case
91+
Unified.Insert v blob ->
92+
Unified.Delete
93+
: map (uncurry Unified.Insert)
94+
(liftShrink2 shrinkVal (liftShrink shrinkBlob) (v, blob))
95+
Unified.Mupsert v -> Unified.Insert v Nothing : map Unified.Mupsert (shrinkVal v)
96+
Unified.Delete -> []
97+
7898
instance (Arbitrary v, Arbitrary blob) => Arbitrary (Normal.Update v blob) where
7999
arbitrary = QC.arbitrary2
80100
shrink = QC.shrink2

0 commit comments

Comments
 (0)