module CLaSH.QuickCheck.Instances.BitPack () where

import           Data.Bits

import qualified Test.QuickCheck
import           Test.QuickCheck

import           CLaSH.Prelude      hiding (lift)
import           CLaSH.Sized.Vector
import           CLaSH.Promoted.Nat

import           CLaSH.QuickCheck.Instances.BitVector
import           CLaSH.QuickCheck.Instances.Vec


instance (BitPack (Unsigned a), KnownNat (BitSize (Unsigned a)))
         => Arbitrary (Unsigned a) where
  arbitrary = unpack <$> arbitrary
  shrink    = fmap unpack . shrink . pack

instance (BitPack (Signed a), KnownNat (BitSize (Signed a)))
         => Arbitrary (Signed a) where
  arbitrary = unpack <$> arbitrary
  shrink    = fmap unpack . shrink . pack