packages feed

prim-instances-0.1.0.0: test/main.hs

{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE DeriveFunctor #-}

import Data.Complex
import Data.Proxy (Proxy(..))
import Data.Ratio (Ratio(..))
import Data.Word (Word64)
import GHC.Fingerprint (Fingerprint)
import Test.QuickCheck hiding (Fixed)
import Test.QuickCheck.Gen (suchThat)
import Test.QuickCheck.Instances ()
import Test.Tasty (defaultMain, testGroup, TestTree)
import Data.Primitive.Instances
import Data.Primitive.Types (Prim(..))
import qualified GHC.Num as Num
import qualified Test.QuickCheck.Classes as QCC

type Laws = QCC.Laws

main :: IO ()
main = QCC.lawsCheckMany namedTests
  where
    namedTests :: [(String, [Laws])]
    namedTests =
      [ ("Complex Double", myLaws pComplex)
      , ("Ratio Int", myLaws pRatio)
      , ("Fingerprint", myLaws pRatio)
      ]
    myLaws :: (Arbitrary a, Show a, Eq a, Prim a) => Proxy a -> [Laws]
    myLaws p = [QCC.primLaws p]

p :: forall a. Proxy a; p = Proxy

pComplex     = p @(Complex Double)
pRatio       = p @(Ratio Int)
pFingerprint = p @Fingerprint