dotfs-0.1.1.3: System/DotFS/Test/Unit.hs
{-# OPTIONS_GHC -fno-warn-unused-imports -fforce-recomp -fth #-}
module System.DotFS.Test.Unit where
import System.DotFS.Test.Utility -- our TH functions
import System.DotFS.Test.Tests -- our test cases
import Control.Monad
import Test.QuickCheck
import System.DotFS.Core.Datatypes
import Test.QuickCheck.Test
import System.Exit
runTests :: IO ()
runTests = $(mkChecks tests)
-- Arbitrary instances:
-- there's actually a reason these instances are here, even if
-- they seem like orphans. The TH above requires them, but ghc doesn't
-- realise this at compile time.
instance Arbitrary DFSExpr where
arbitrary = sized expr
where
expr n | n <= 0 = atom
| otherwise = oneof [ atom
, liftM2 UniOp unioperator subform
, liftM3 BiOp bioperator subform subform'
]
where
atom = oneof [ liftM Var (elements ["P", "Q", "R", "S"])
, liftM Prim arbitrary
]
subform = expr (n `div` 2)
subform' = expr (n `div` 4)
unioperator = elements [Not]
bioperator = elements [Add, Sub, Mul, Div, And, Or, Eq, LTOp, GTOp, GEQ, LEQ, NEQ]
instance Arbitrary Value where
arbitrary = oneof [ liftM VBool arbitrary
, liftM VInt arbitrary
, liftM VString arbitraryStr
]