{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE TypeApplications #-}
module Test.Validity.Arbitrary
( arbitrarySpec
, arbitraryGeneratesOnlyValid
) where
import Data.Data
import Data.GenValidity
import Test.Hspec
import Test.QuickCheck
import Test.Validity.GenValidity
import Test.Validity.Utils
arbitrarySpec ::
forall a. (Typeable a, Show a, Validity a, Arbitrary a)
=> Spec
arbitrarySpec = do
let name = nameOf @a
describe ("Arbitrary " ++ name) $
describe ("arbitrary :: Gen " ++ name) $
it "only generates valid values" $ arbitraryGeneratesOnlyValid @a
arbitraryGeneratesOnlyValid ::
forall a. (Show a, Validity a, Arbitrary a)
=> Property
arbitraryGeneratesOnlyValid = genGeneratesValid @a arbitrary