hw-packed-vector-0.2.1.0: test/HaskellWorks/Data/PackedVector/PackedVector64Spec.hs
module HaskellWorks.Data.PackedVector.PackedVector64Spec (spec) where
import HaskellWorks.Data.AtIndex ((!!!))
import HaskellWorks.Data.PackedVector.PackedVector64
import HaskellWorks.Hspec.Hedgehog
import Hedgehog
import Test.Hspec
import qualified HaskellWorks.Data.AtIndex as HW
import qualified HaskellWorks.Data.PackedVector.PackedVector64 as PV
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.PackedVector64Spec" $ do
it "fromList/toList works" $ 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)
toList (fromList wSize ws) === ws
it "fromListN/toList works" $ 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)
toList (fromListN (HW.length ws) wSize ws) === ws
it "Index lookup works" $ require $ property $ do
wSize <- forAll $ G.subWordSize 64
len <- forAll $ G.int (R.linear 1 32)
ws <- forAll $ G.list (R.singleton len) (G.word64OfSize wSize)
i <- forAll $ G.int64 (R.linear 0 (fromIntegral len - 1))
(PV.fromList wSize ws !!! i) === (ws !!! i)