packages feed

numhask-hedgehog-0.3.1: test/test.hs

{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE RebindableSyntax #-}
{-# OPTIONS_GHC -Wall #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

module Main where

import NumHask.Hedgehog
import NumHask.Prelude
import qualified Hedgehog as H
import qualified Hedgehog.Internal.Gen as Gen
import qualified Hedgehog.Range as Range
import qualified Prelude as P

asserts :: H.TestLimit -> [IO Bool]
asserts n =
  [ assertProps "Int" n (integral_ :: H.Gen Int) integralProps
  , assertProps "Int8" n
    (integral_ :: H.Gen Int8) integralProps
  , assertProps "Word8" n
    (integral_ :: H.Gen Word8)
    integralProps
  , assertProps "Integer" n
    (integral (Range.constantFrom zero -1000000 1000000) :: H.Gen Integer)
    integralUnboundedProps
  , assertProps "Natural" n
    (integral (Range.constantFrom zero zero 1000000) :: H.Gen Natural)
    naturalProps
  , assertProps "Bool" n Gen.bool
    boolProps
  , assertProps "Rational" n
    (negUniform :: H.Gen (Ratio Integer)) rationalProps
  , assertProps "Float" n
    (negUniform :: H.Gen Float) fieldProps
  , assertProps "Float - Quotient" n
    (negUniform :: H.Gen Float) quotientFieldProps
  ]

main :: IO ()
main = do
  ok <- all P.id <$> sequence (asserts (P.fromInteger 100 :: H.TestLimit))
  unless ok
    exitFailure