-- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Subobject/View.hs {-# LINE 40 "src/Numeric/BLAS/Subobject/View.hs" #-} {-# OPTIONS_GHC -XTypeOperators #-} module Test.Numeric.BLAS.Subobject.View where import qualified Test.DocTest.Driver as DocTest {-# LINE 43 "src/Numeric/BLAS/Subobject/View.hs" #-} import qualified Numeric.BLAS.Slice as Slice import qualified Numeric.BLAS.Subobject.Layout as Layout import Test.Slice (shapeInt) import qualified Data.Array.Comfort.Boxed as Array import qualified Data.Array.Comfort.Shape as Shape import qualified Data.Map as Map import Data.Array.Comfort.Shape ((::+)((::+))) import Data.Array.Comfort.Boxed ((!)) import Control.Applicative (liftA2, liftA3, pure, (<$>)) import qualified Test.QuickCheck as QC genShape :: QC.Gen (Shape.Range Int) genShape = liftA2 (\m n -> Shape.Range (min m n) (max m n)) QC.arbitrary QC.arbitrary genAppend :: QC.Gen (Shape.Range Int ::+ Shape.Range Int) genAppend = liftA2 (::+) genShape genShape genSlice :: sh -> QC.Gen (Slice.T sh) genSlice sh = liftA3 Slice.Cons (QC.choose (0,100)) (Layout.Slice <$> QC.choose (1,100)) (pure sh) genSlice2 :: shA -> shB -> QC.Gen (Slice.T shA, Slice.T shB) genSlice2 shA shB = do s <- QC.choose (0,100) k <- Layout.Slice <$> QC.choose (1,100) return (Slice.Cons s k shA, Slice.Cons s k shB) type ShapeInt = Shape.ZeroBased Int toShapeInt :: (Shape.C sh) => Slice.T sh -> Slice.T ShapeInt toShapeInt = Slice.mapShape (shapeInt . Shape.size) test :: DocTest.T () test = do DocTest.printPrefix "Numeric.BLAS.Subobject.View:127: " {-# LINE 127 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 127 "src/Numeric/BLAS/Subobject/View.hs" #-} QC.forAll (QC.choose (1,100)) $ \numRows -> QC.forAll (QC.choose (0,100)) $ \numColumns -> QC.forAll (genSlice (shapeInt numRows, shapeInt numColumns)) $ \slice -> QC.forAll (QC.elements $ Shape.indices $ shapeInt numRows) $ \ix -> Slice.row ix slice == Slice.rowArray slice ! ix ) DocTest.printPrefix "Numeric.BLAS.Subobject.View:150: " {-# LINE 150 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 150 "src/Numeric/BLAS/Subobject/View.hs" #-} QC.forAll (QC.choose (0,100)) $ \numRows -> QC.forAll (QC.choose (1,100)) $ \numColumns -> QC.forAll (genSlice (shapeInt numRows, shapeInt numColumns)) $ \slice -> QC.forAll (QC.elements $ Shape.indices $ shapeInt numColumns) $ \ix -> Slice.column ix slice == Slice.columnArray slice ! ix ) DocTest.printPrefix "Numeric.BLAS.Subobject.View:174: " {-# LINE 174 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 174 "src/Numeric/BLAS/Subobject/View.hs" #-} QC.forAll (QC.choose (1,100)) $ \numTopRows -> QC.forAll (QC.choose (1,100)) $ \numBottomRows -> QC.forAll (QC.choose (0,100)) $ \numColumns -> QC.forAll (genSlice (shapeInt numTopRows ::+ shapeInt numBottomRows, shapeInt numColumns)) $ \slice -> Slice.rowArray slice == Array.append (Slice.rowArray (Slice.topSubmatrix slice)) (Slice.rowArray (Slice.bottomSubmatrix slice)) ) DocTest.printPrefix "Numeric.BLAS.Subobject.View:322: " {-# LINE 322 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 322 "src/Numeric/BLAS/Subobject/View.hs" #-} QC.forAll (genSlice =<< genAppend) $ \slice -> Slice.take (case Slice.shape slice of (sh::+_) -> Shape.size sh) (toShapeInt slice) == toShapeInt (Slice.left slice) ) DocTest.printPrefix "Numeric.BLAS.Subobject.View:342: " {-# LINE 342 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 342 "src/Numeric/BLAS/Subobject/View.hs" #-} QC.forAll (genSlice =<< genAppend) $ \slice -> Slice.drop (case Slice.shape slice of (sh::+_) -> Shape.size sh) (toShapeInt slice) == toShapeInt (Slice.right slice) ) DocTest.printPrefix "Numeric.BLAS.Subobject.View:367: " {-# LINE 367 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 367 "src/Numeric/BLAS/Subobject/View.hs" #-} \(QC.NonNegative n) (QC.NonNegative start) (QC.NonNegative size) -> QC.forAll (genSlice $ shapeInt n) $ \slice -> Slice.sub start size slice == Slice.take size (Slice.drop start slice) ) DocTest.printPrefix "Numeric.BLAS.Subobject.View:389: " {-# LINE 389 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 389 "src/Numeric/BLAS/Subobject/View.hs" #-} \n m -> let rng = Shape.Range (min n m) (max n (m::Int)) in QC.forAll (genSlice rng) $ \slice -> Slice.subRange rng slice == slice ) DocTest.printPrefix "Numeric.BLAS.Subobject.View:411: " {-# LINE 411 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 411 "src/Numeric/BLAS/Subobject/View.hs" #-} \n m -> let rng = Shape.Interval (min n m) (max n (m::Int)) in QC.forAll (genSlice rng) $ \slice -> Slice.subInterval rng slice == slice ) DocTest.printPrefix "Numeric.BLAS.Subobject.View:453: " {-# LINE 453 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 453 "src/Numeric/BLAS/Subobject/View.hs" #-} QC.forAll (fmap shapeInt $ QC.choose (0,100)) $ \shapeA -> QC.forAll (fmap shapeInt $ QC.choose (0,100)) $ \shapeB -> QC.forAll (fmap shapeInt $ QC.choose (0,100)) $ \shapeC -> QC.forAll (genSlice2 (Map.fromList $ ('a', shapeA) : ('b', shapeB) : ('c', shapeC) : []) (shapeA ::+ shapeB ::+ shapeC)) $ \(sliceMap, sliceParted) -> Slice.map sliceMap Map.! 'b' == Slice.left (Slice.right sliceParted) ) DocTest.printPrefix "Numeric.BLAS.Subobject.View:466: " {-# LINE 466 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 466 "src/Numeric/BLAS/Subobject/View.hs" #-} QC.forAll (QC.choose (0,100)) $ \numRows -> QC.forAll (QC.choose (0,100)) $ \numColumns -> let rowShape = shapeInt numRows columnShape = shapeInt numColumns mapShape_ = Map.fromList $ map (\k -> (k, columnShape)) (Shape.indices rowShape) in QC.forAll (genSlice2 mapShape_ (rowShape, columnShape)) $ \(sliceMap, sliceMatrix) -> Map.toAscList (Slice.map sliceMap) == Array.toAssociations (Slice.rowArray sliceMatrix) )