accelerate-arithmetic-0.0: test/Test/Data/Array/Accelerate/Arithmetic/LinearAlgebra.hs
module Test.Data.Array.Accelerate.Arithmetic.LinearAlgebra where
import qualified Data.Array.Accelerate.Arithmetic.LinearAlgebra as LinAlg
import qualified Data.Array.Accelerate as A
import Data.Array.Accelerate.Arithmetic.LinearAlgebra (Matrix, numCols, )
import Data.Array.Accelerate (Z(Z), (:.)((:.)),)
import Test.Data.Array.Accelerate.Arithmetic.Utility (arbitraryArray, (=!=), )
import qualified Test.QuickCheck as QC
import Data.Word (Word32, )
newtype ArbMatrix a = ArbMatrix (Matrix Z a)
instance (QC.Arbitrary a, A.Elt a) => QC.Arbitrary (ArbMatrix a) where
arbitrary = do
nc <- QC.choose (1,100)
nr <- QC.choose (1,100)
fmap (ArbMatrix . A.use) $
arbitraryArray (Z :. nr :. nc) QC.arbitrary
flattenMatrix :: ArbMatrix Word32 -> Bool
flattenMatrix (ArbMatrix m) =
LinAlg.flattenMatrixReshape m
=!=
LinAlg.flattenMatrixBackPermute m
restoreMatrix :: ArbMatrix Word32 -> Bool
restoreMatrix (ArbMatrix m) =
let v = LinAlg.flattenMatrix m
in LinAlg.restoreMatrixReshape (numCols m) v
=!=
LinAlg.restoreMatrixBackPermute (numCols m) v
flattenRestoreMatrix :: ArbMatrix Word32 -> Bool
flattenRestoreMatrix (ArbMatrix m) =
m =!= LinAlg.restoreMatrix (numCols m) (LinAlg.flattenMatrix m)