@@ -9,6 +9,9 @@ import Cardano.Chain.Common (maxLovelaceVal)
99
1010import qualified Data.Aeson as Aeson
1111import Data.Word (Word64 )
12+ import Data.WideWord.Word128 (Word128 (.. ))
13+
14+ import Database.Persist.Class (PersistField (.. ))
1215
1316import Cardano.Db
1417
@@ -24,6 +27,12 @@ prop_roundtrip_Ada_via_JSON =
2427 mv <- H. forAll genAda
2528 H. tripping mv Aeson. encode Aeson. eitherDecode
2629
30+ prop_roundtrip_Word128_PersistField :: Property
31+ prop_roundtrip_Word128_PersistField =
32+ H. withTests 5000 . H. property $ do
33+ w128 <- H. forAll genWord128
34+ H. tripping w128 toPersistValue fromPersistValue
35+
2736-- -----------------------------------------------------------------------------
2837
2938genAda :: Gen Ada
@@ -38,6 +47,17 @@ genAda =
3847 , Gen. word64 (Range. linear (maxLovelaceVal - 5000 ) maxLovelaceVal) -- Near max.
3948 ]
4049
50+ genWord128 :: Gen Word128
51+ genWord128 = Word128 <$> genWord64 <*> genWord64
52+
53+ genWord64 :: Gen Word64
54+ genWord64 =
55+ Gen. choice
56+ [ Gen. word64 Range. constantBounded
57+ , Gen. word64 (Range. linear 0 5000 ) -- Small values
58+ , Gen. word64 (Range. linear (maxBound - 5000 ) maxBound ) -- Near max.
59+ ]
60+
4161-- -----------------------------------------------------------------------------
4262
4363tests :: IO Bool
0 commit comments