{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Test.Cardano.Slotting.Arbitrary () where
import Cardano.Slotting.Slot
import Test.QuickCheck
instance Arbitrary SlotNo where
arbitrary :: Gen SlotNo
arbitrary =
Word64 -> SlotNo
SlotNo
(Word64 -> SlotNo) -> Gen Word64 -> Gen SlotNo
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ( (Positive Word64 -> Word64
forall a. Positive a -> a
getPositive (Positive Word64 -> Word64) -> Gen (Positive Word64) -> Gen Word64
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Positive Word64)
forall a. Arbitrary a => Gen a
arbitrary)
Gen Word64 -> (Word64 -> Bool) -> Gen Word64
forall a. Gen a -> (a -> Bool) -> Gen a
`suchThat` (\Word64
n -> Word64
n Word64 -> Word64 -> Bool
forall a. Ord a => a -> a -> Bool
< Word64
forall a. Bounded a => a
maxBound Word64 -> Word64 -> Word64
forall a. Num a => a -> a -> a
- Word64
2 Word64 -> Int -> Word64
forall a b. (Num a, Integral b) => a -> b -> a
^ (Int
32 :: Int))
)
shrink :: SlotNo -> [SlotNo]
shrink (SlotNo Word64
n) = [Word64 -> SlotNo
SlotNo Word64
n' | Word64
n' <- Word64 -> [Word64]
forall a. Arbitrary a => a -> [a]
shrink Word64
n, Word64
n' Word64 -> Word64 -> Bool
forall a. Ord a => a -> a -> Bool
> Word64
0]
deriving newtype instance Arbitrary EpochNo