{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE OverlappingInstances #-} module Main ( main, ) where import Test.QuickCheck (Arbitrary, quickCheckResult) import Data.Tagged (Tagged(Tagged, unTagged)) import Data.Default (Default(def)) import System.Random (Random) --import qualified Data.Array as A (Array) --import qualified Data.Array.Repa as R (D, DIM1, DIM2, Array) import qualified Data.Packed.Matrix as HM (Matrix) import qualified Data.Packed.Vector as HV (Vector) import TestBase (Truncable, PotrfTestData(..), Tag2(), eqMatrix, handleResult) import FPNLA.Matrix.Instances.RepaMatrix(RepaMatrix, RepaVector) import FPNLA.Matrix.Instances.HMatrix () import FPNLA.Operations.Parameters (ResM, getResultDataM, StratCtx) import FPNLA.Operations.LAPACK.Strategies (HMatrixBindSeq, CholLLVSeq, CholLLVPar_Repa, CholLLVBlocksSeq) import FPNLA.Operations.BLAS.Strategies (DefSeq, DefPar_ST) import FPNLA.Operations.LAPACK (POTRF(potrf)) -- Propiedades: propPotrfIsOK :: forall st m v e. (Show e, Eq e, Truncable e, Arbitrary e, Random e, POTRF st m v e, Default (Tagged st (StratCtx st)), POTRF HMatrixBindSeq m v e) => PotrfTestData m e -> Tagged (Tag2 st v) Bool propPotrfIsOK (PotrfTestData pmA) = Tagged $ eqMatrix r1 r2 where r1 = getResultDataM (potrf (unTagged (def :: Tagged st (StratCtx st))) pmA :: ResM st v m e) r2 = getResultDataM (potrf (unTagged (def :: Tagged HMatrixBindSeq (StratCtx HMatrixBindSeq))) pmA :: ResM HMatrixBindSeq v m e) type TMatrix = {-VMatrix-} {--VMatrix--} HM.Matrix {-LLR.LLMatrix-} {-RepaMatrix-} type TVector = {-VVector-} {--A.Array Int--} HV.Vector {-LLR.LVector-} {-RepaVector-} --type TElem = Complex Double type TElem = Double propTest :: PotrfTestData HM.Matrix Double -> Tagged (Tag2 HMatrixBindSeq HV.Vector) Bool propTest = propPotrfIsOK propPotrfDefSeqStratIsOK_Inst :: PotrfTestData TMatrix TElem -> Tagged (Tag2 (CholLLVSeq DefSeq DefSeq) TVector) Bool propPotrfDefSeqStratIsOK_Inst = propPotrfIsOK propPotrfRepaDefSeqStratIsOK_Inst :: PotrfTestData RepaMatrix TElem -> Tagged (Tag2 (CholLLVPar_Repa DefSeq DefSeq) RepaVector) Bool propPotrfRepaDefSeqStratIsOK_Inst = propPotrfIsOK propPotrfCholLLVBlocksSeqStratIsOK_Inst :: PotrfTestData TMatrix TElem -> Tagged (Tag2 (CholLLVBlocksSeq DefPar_ST DefSeq DefSeq (CholLLVSeq DefSeq DefSeq)) TVector) Bool propPotrfCholLLVBlocksSeqStratIsOK_Inst = propPotrfIsOK execPotrfQC :: IO [()] execPotrfQC = do putStrLn "execPotrfQC" res1 <- quickCheckResult propTest res2 <- quickCheckResult propPotrfDefSeqStratIsOK_Inst res3 <- quickCheckResult propPotrfRepaDefSeqStratIsOK_Inst res4 <- quickCheckResult propPotrfCholLLVBlocksSeqStratIsOK_Inst mapM handleResult [res1, res2, res3, res4] execQuickCheck :: IO [()] execQuickCheck = execPotrfQC main :: IO [()] main = execQuickCheck