-- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Matrix/RowMajor/Mutable.hs {-# LINE 46 "src/Numeric/BLAS/Matrix/RowMajor/Mutable.hs" #-} {-# OPTIONS_GHC -XTypeOperators #-} module Test.ComplexFloat.Numeric.BLAS.Matrix.RowMajor.Mutable where import qualified Test.DocTest.Driver as DocTest {-# LINE 48 "src/Numeric/BLAS/Matrix/RowMajor/Mutable.hs" #-} import Test.ComplexFloat.Numeric.BLAS.Matrix.RowMajor (forMatrix) import Test.ComplexFloat.Numeric.BLAS.Vector (genVector, number_) import qualified Numeric.BLAS.Matrix.RowMajor.Mutable as MutMatrix import qualified Numeric.BLAS.Matrix.RowMajor as Matrix import qualified Numeric.BLAS.Subobject.View.Matrix as ViewMatrix import qualified Numeric.BLAS.Subobject.Shape as Subshape import Numeric.BLAS.Vector ((.*|), (|+|)) import qualified Data.Array.Comfort.Storable.Mutable as MutArray import qualified Data.Array.Comfort.Storable as Array import qualified Data.Array.Comfort.Shape as Shape import Data.Array.Comfort.Shape ((::+)((::+))) import qualified Test.QuickCheck as QC import Test.QuickCheck ((===)) test :: DocTest.T () test = do DocTest.printPrefix "Numeric.BLAS.Matrix.RowMajor.Mutable:166: " {-# LINE 166 "src/Numeric/BLAS/Matrix/RowMajor/Mutable.hs" #-} DocTest.property( {-# LINE 166 "src/Numeric/BLAS/Matrix/RowMajor/Mutable.hs" #-} QC.forAll number_ $ \alpha -> QC.forAll number_ $ \beta -> forMatrix number_ $ \a0 -> let (Shape.ZeroBased m, Shape.ZeroBased n) = Array.shape a0 in QC.forAll (QC.choose (0, m)) $ \mk -> QC.forAll (QC.choose (0, n)) $ \nk -> let splitHeight = Shape.ZeroBased mk ::+ Shape.ZeroBased (m-mk) in let splitWidth = Shape.ZeroBased nk ::+ Shape.ZeroBased (n-nk) in let a = Array.reshape (splitHeight, splitWidth) a0 in QC.forAll (genVector (splitHeight, splitWidth) number_) $ \b -> alpha.*|a |+| beta.*|b === MutArray.runST (do bmut <- MutArray.thaw b -- take quandrant in two steps in order to challenge submatrix selection let au = Matrix.takeTop a let al = Matrix.takeBottom a let focusA view = Array.mapShape (Subshape.focus view . Subshape.submatrixFromMatrix) let focusB view = MutArray.mapShape (Subshape.focus view . Subshape.submatrixFromMatrix) bmut let b0 = focusB (ViewMatrix.left . ViewMatrix.top) let b1 = focusB (ViewMatrix.right . ViewMatrix.top) let b2 = focusB (ViewMatrix.left . ViewMatrix.bottom) let b3 = focusB (ViewMatrix.right . ViewMatrix.bottom) MutMatrix.addSubmatrix alpha (focusA ViewMatrix.left au) beta b0 MutMatrix.addSubmatrix alpha (focusA ViewMatrix.right au) beta b1 MutMatrix.addSubmatrix alpha (focusA ViewMatrix.left al) beta b2 MutMatrix.addSubmatrix alpha (focusA ViewMatrix.right al) beta b3 return bmut) )