packages feed

bed-and-breakfast-0.3: quick-check-tests.hs

{-# LANGUAGE Haskell2010, TemplateHaskell #-}

import Control.Monad

import Numeric.Matrix

import Test.QuickCheck
import Test.QuickCheck.All

import System.Exit


dim :: Num a => a
dim = 4

instance (MatrixElement e, Arbitrary e) => Arbitrary (Matrix e) where

    arbitrary = sequence (replicate dim (vector dim)) >>= return . fromList


prop_det :: Matrix Rational -> Bool
prop_det m1 = let m1' = inv m1 in case m1' of (Just _) -> det m1 /= 0; _ -> det m1 == 0

prop_inv :: Matrix Rational -> Bool
prop_inv m1 = let m1' = inv m1 in case m1' of (Just m1') -> m1' * m1 == unit dim; _ -> True

prop_rank :: Matrix Rational -> Bool
prop_rank m1 = let r = rank m1 in if r < dim then det m1 == 0 else r == dim


main = do
    success <- $(quickCheckAll)
    
    (if success then exitSuccess else exitFailure)