packages feed

blas-0.6: tests/Perm.hs

module Perm( tests_Perm ) where
    
import Driver

import Data.Vector.Dense
import Data.Matrix.Dense
import Data.Matrix.Perm

import Data.Permutation ( Permutation, permutation )
import qualified Data.Permutation as P

import Generators.Matrix.Perm

type V = Vector Int E
type M = Matrix (Int,Int) E
type P = Perm (Int,Int) E

prop_perm_herm (TestPerm (p :: P)) =
    toPermutation (herm p) == P.inverse (toPermutation p)

prop_perm_apply_basis (PermMBasis (p :: P) i) =
    n > 0 ==> p <*> (basisVector n i) === basisVector n (P.apply (toPermutation p) i)
  where
    n = numCols p

prop_perm_herm_apply (PermMV (p :: P) x) =
    p <*> herm p <*> x === x

prop_herm_perm_apply (PermMV (p :: P) x) =
    herm p <*> p <*> x === x

prop_perm_solve (PermMV (p :: P) x) =
    p <\> x === herm p <*> x

prop_perm_applyMat_cols (PermMM (p :: P) a) =
    cols (p <**> a) === map (p <*>) (cols a)

prop_perm_herm_applyMat (PermMM (p :: P) a) =
    p <**> herm p <**> a === a

prop_herm_perm_applyMat (PermMM (p :: P) a) =
    herm p <**> p <**> a === a

prop_perm_solveMat_cols (PermMM (p :: P) a) =
    cols (p <\\> a) === map (p <\>) (cols a)

prop_perm_solveMat (PermMM (p :: P) a) =
    p <\\> a === herm p <**> a
    

tests_Perm =
    [ ("perm herm"             , mytest prop_perm_herm)
    , ("perm apply basis"      , mytest prop_perm_apply_basis)
    , ("perm herm apply"       , mytest prop_perm_herm_apply)
    , ("herm perm apply"       , mytest prop_herm_perm_apply)
    , ("perm solve"            , mytest prop_perm_solve)
    , ("perm applyMat cols"    , mytest prop_perm_applyMat_cols)
    , ("perm herm applyMat"    , mytest prop_perm_herm_applyMat)
    , ("herm perm applyMat"    , mytest prop_herm_perm_applyMat)
    , ("perm solveMat cols"    , mytest prop_perm_solveMat_cols)
    , ("perm solveMat"         , mytest prop_perm_solveMat)
    ]