-- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Subobject/View.hs {-# LINE 35 "src/Numeric/BLAS/Subobject/View.hs" #-} {-# OPTIONS_GHC -XTypeOperators #-} module Test.Numeric.BLAS.Subobject.View where import qualified Test.DocTest.Driver as DocTest {-# LINE 38 "src/Numeric/BLAS/Subobject/View.hs" #-} import qualified Numeric.BLAS.Subobject.View 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 type Slice = Slice.T Layout.Slice genSlice :: sh -> QC.Gen (Slice sh) genSlice sh = liftA3 Slice.Cons (QC.choose (0,100)) (Layout.Slice <$> QC.choose (1,100)) (pure sh) genSlice2 :: shA -> shB -> QC.Gen (Slice shA, Slice 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 sh -> Slice ShapeInt toShapeInt = Slice.mapShape (shapeInt . Shape.size) test :: DocTest.T () test = do DocTest.printPrefix "Numeric.BLAS.Subobject.View:168: " {-# LINE 168 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 168 "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:191: " {-# LINE 191 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 191 "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:215: " {-# LINE 215 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 215 "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:318: " {-# LINE 318 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 318 "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:338: " {-# LINE 338 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 338 "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:360: " {-# LINE 360 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 360 "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:382: " {-# LINE 382 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 382 "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:404: " {-# LINE 404 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 404 "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:446: " {-# LINE 446 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 446 "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:459: " {-# LINE 459 "src/Numeric/BLAS/Subobject/View.hs" #-} DocTest.property( {-# LINE 459 "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) )