packages feed

hw-packed-vector-0.2.1.0: test/HaskellWorks/Data/PackedVector/InternalSpec.hs

module HaskellWorks.Data.PackedVector.InternalSpec (spec) where

import HaskellWorks.Data.PackedVector.Internal
import HaskellWorks.Hspec.Hedgehog
import Hedgehog
import Test.Hspec

import qualified HaskellWorks.Gen as G
import qualified Hedgehog.Gen     as G
import qualified Hedgehog.Range   as R

{-# ANN module ("HLint: ignore Redundant do" :: String) #-}

spec :: Spec
spec = describe "HaskellWorks.Data.PackedVector.InternalSpec" $ do
  it "PackedVector Word8" $ require $ property $ do
    wSize <- forAll $ G.subWordSize 8
    len   <- forAll $ G.int   (R.linear 1 3)
    ws    <- forAll $ G.list  (R.singleton len) (G.word8OfSize wSize)
    unpackBits (length ws) wSize (packBits wSize ws) === ws
  it "PackedVector Word64" $ require $ property $ do
    wSize <- forAll $ G.subWordSize 64
    len   <- forAll $ G.int   (R.linear 1 128)
    ws    <- forAll $ G.list  (R.singleton len) (G.word64OfSize wSize)
    unpackBits (length ws) wSize (packBits wSize ws) === ws