{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
-- |
-- Module : Main (tests)
-- Copyright : 2019 (c) Emily Pillmore
-- License : BSD
--
-- Maintainer : Emily Pillmore <emilypi@cohomolo.gy>
-- Stability : Experimental
-- Portability : TypeFamilies
--
module Main
( main
) where
import Data.Functor
import Data.Maybe
import Data.Vector (Vector)
import Data.Vector.NonEmpty (NonEmptyVector)
import qualified Data.Vector.NonEmpty as NEV
import Hedgehog
import qualified Hedgehog.Range as Range
import qualified Hedgehog.Internal.Gen as Gen
main :: IO ()
main = void $ checkParallel $ Group "NonEmptyVector constructor"
[ ("prop_reverse", prop_reverse)
, ("prop_from_to_list", prop_from_to_list)
, ("prop_from_to_vec", prop_from_to_vec)
]
genList :: Gen [Int]
genList = Gen.list (Range.linear 1 100) Gen.enumBounded
genNEV :: Gen (NonEmptyVector Int)
genNEV = fmap (fromJust . NEV.fromList) genList
genV :: Gen (Vector Int)
genV = NEV.toVector <$> genNEV
prop_reverse :: Property
prop_reverse = property $ do
t <- forAll genNEV
NEV.reverse (NEV.reverse t) === t
prop_from_to_list :: Property
prop_from_to_list = property $ do
t <- forAll $ genNEV
u <- forAll $ genList
NEV.fromList (NEV.toList t) === Just t
fmap NEV.toList (NEV.fromList u) === Just u
prop_from_to_vec :: Property
prop_from_to_vec = property $ do
t <- forAll $ genNEV
u <- forAll $ genV
NEV.fromVector (NEV.toVector t) === Just t
fmap NEV.toVector (NEV.fromVector u) === Just u