connections-0.0.3: test/Test/Data/Connection.hs
{-# LANGUAGE TemplateHaskell #-}
module Test.Data.Connection where
import Control.Applicative
import Data.Float
import Data.Ord
import Data.Prd
import Data.Prd.Nan
import Data.Ratio
import Data.Semifield
import Data.Semilattice.N5
import Data.Semilattice.Top
import GHC.Real hiding (Fractional(..), (^^), (^), div)
import Hedgehog
import Numeric.Natural
import Prelude hiding (Bounded)
import qualified Data.Connection.Property as Prop
import qualified Hedgehog.Gen as G
import qualified Hedgehog.Range as R
ri :: (Integral a, Bound a) => Range a
ri = R.linearFrom 0 minimal maximal
ri' :: Range Integer
ri' = R.linearFrom 0 (- 2^127) (2^127)
ri'' :: Range Integer
ri'' = R.exponentialFrom 0 (-340282366920938463463374607431768211456) 340282366920938463463374607431768211456
rn :: Range Natural
rn = R.linear 0 (2^128)
rf :: Range Float
rf = R.exponentialFloatFrom 0 (-3.4028235e38) 3.4028235e38
rd :: Range Double
rd = R.exponentialFloatFrom 0 (-1.7976931348623157e308) 1.7976931348623157e308
ord :: Gen Ordering
ord = G.element [LT, EQ, GT]
f32 :: Gen Float
f32 = gen_fld $ G.float rf
f64 :: Gen Double
f64 = gen_fld $ G.double rd
rat :: Gen (Ratio Integer)
rat = gen_fld $ G.realFrac_ (R.linearFracFrom 0 (- 2^127) (2^127))
pos :: Gen (Ratio Natural)
pos = G.frequency [(49, gen), (1, G.element [pinf, anan])]
where gen = G.realFrac_ (R.linearFracFrom 0 0 (2^127))
gen_dwn :: Gen a -> Gen (Down a)
gen_dwn gen = Down <$> gen
gen_nan :: Gen a -> Gen (Nan a)
gen_nan gen = G.frequency [(9, Def <$> gen), (1, pure Nan)]
gen_pn5 :: Gen a -> Gen (N5 a)
gen_pn5 gen = N5 <$> gen
gen_bot :: Gen a -> Gen (Bottom a)
gen_bot gen = G.frequency [(9, Just <$> gen), (1, pure Nothing)]
gen_top :: Gen a -> Gen (Top a)
gen_top gen = G.frequency [(9, Fin <$> gen), (1, pure Top)]
gen_bnd :: Gen a -> Gen (Bounded a)
gen_bnd gen = G.frequency [(18, (Just . Fin) <$> gen), (1, pure Nothing), (1, pure $ Just Top)]
gen_lft :: Gen a -> Gen (Lifted a)
gen_lft = gen_nan . gen_top
gen_ext :: Gen a -> Gen (Extended a)
gen_ext = gen_nan . gen_bnd
gen_fld :: Field a => Gen a -> Gen a
gen_fld gen = G.frequency [(49, gen), (1, G.element [ninf, pinf, anan])]
tests :: IO Bool
tests = checkParallel $$(discover)