clash-prelude-quickcheck-0.1.0.0: src/CLaSH/QuickCheck/Instances/BitVector.hs
module CLaSH.QuickCheck.Instances.BitVector () where
import Prelude ()
import Data.Bits
import Data.Traversable
import qualified Test.QuickCheck
import Test.QuickCheck
import CLaSH.Prelude hiding (sequence, lift)
import CLaSH.Sized.Vector
import CLaSH.Promoted.Nat
import qualified CLaSH.Sized.Vector as V
iso1 :: Bool -> Bit
iso1 = \case False -> 0
True -> 1
iso2 :: Bit -> Bool
iso2 = \case 0 -> False
_ -> True
instance KnownNat n => Arbitrary (BitVector n) where
arbitrary = fmap pack $ sequence $ V.repeat $ iso1 <$> arbitrary
shrink v = fmap pack x
where x :: [Vec n Bit]
x = (fmap . fmap) iso1 $ sequence $ shrink <$> iso2 <$> unpack v