packages feed

toysolver-0.0.2: src/TestAReal2.hs

{-# LANGUAGE TemplateHaskell #-}

import Data.Maybe
import Data.Ratio
import Test.HUnit hiding (Test)
import Test.QuickCheck
import Test.Framework (Test, defaultMain, testGroup)
import Test.Framework.TH
import Test.Framework.Providers.HUnit
import Test.Framework.Providers.QuickCheck2

import Data.Polynomial
import Data.AlgebraicNumber

import Control.Monad
import System.IO

{--------------------------------------------------------------------
  Num
--------------------------------------------------------------------}

prop_add_comm =
  forAll areals $ \a ->
  forAll areals $ \b ->
    a + b == b + a

prop_add_assoc =
  forAll areals $ \a ->
  forAll areals $ \b ->
  forAll areals $ \c ->
    a + (b + c) == (a + b) + c

prop_add_unitL =
  forAll areals $ \a ->
    0 + a == a

prop_add_unitR =
  forAll areals $ \a ->
    a + 0 == a

prop_mult_comm =
  forAll areals $ \a ->
  forAll areals $ \b ->
    a * b == b * a

prop_mult_assoc =
  forAll areals $ \a ->
  forAll areals $ \b ->
  forAll areals $ \c ->
    a * (b * c) == (a * b) * c

prop_mult_unitL =
  forAll areals $ \a ->
    1 * a == a

prop_mult_unitR =
  forAll areals $ \a ->
    a * 1 == a

prop_mult_dist =
  forAll areals $ \a ->
  forAll areals $ \b ->
  forAll areals $ \c ->
    a * (b + c) == a * b + a * c

prop_mult_zero = 
  forAll areals $ \a ->
    0 * a ==  0

{--------------------------------------------------------------------
  Generators
--------------------------------------------------------------------}

areals :: Gen AReal
areals = oneof $ map return $ samples

samples :: [AReal]
samples = [0, 1, -1, 2, -2] ++ concatMap realRoots ps
  where
    x = var ()
    ps = [x^2 - 2, x^2 - 3 {- , x^3 - 2, x^6 + 6*x^3 - 2*x^2 + 9 -}]

------------------------------------------------------------------------
-- Test harness

main :: IO ()
main = $(defaultMainGenerator)