comfort-blas 0.0.1 → 0.0.2
raw patch · 14 files changed
+1405/−841 lines, 14 filesdep +non-emptydep +storablevectorPVP ok
version bump matches the API change (PVP)
Dependencies added: non-empty, storablevector
API changes (from Hackage documentation)
+ Numeric.BLAS.Matrix.RowMajor: multiplyVectorLeft :: (Eq height, C height, C width, Floating a) => Vector height a -> Matrix height width a -> Vector width a
+ Numeric.BLAS.Matrix.RowMajor: multiplyVectorRight :: (C height, C width, Eq width, Floating a) => Matrix height width a -> Vector width a -> Vector height a
+ Numeric.BLAS.Slice: diagonal :: C sh => T (Square sh) -> T sh
+ Numeric.BLAS.Slice: drop :: Int -> T ShapeInt -> T ShapeInt
+ Numeric.BLAS.Slice: sub :: Int -> Int -> T ShapeInt -> T ShapeInt
+ Numeric.BLAS.Slice: take :: Int -> T ShapeInt -> T ShapeInt
+ Numeric.BLAS.Slice: type ShapeInt = ZeroBased Int
+ Numeric.BLAS.Vector.Slice: append :: (C sliceA, C sliceB, Floating a) => T shA sliceA a -> T shB sliceB a -> Vector (sliceA ::+ sliceB) a
+ Numeric.BLAS.Vector.Slice: chunk :: Storable a => T sh ShapeInt a -> Chunk a
+ Numeric.BLAS.Vector.Slice: concat :: Floating a => [Chunk a] -> Vector ShapeInt a
+ Numeric.BLAS.Vector.Slice: data Chunk a
+ Numeric.BLAS.Vector.Slice: fromStorableVector :: Vector a -> T ShapeInt ShapeInt a
+ Numeric.BLAS.Vector.Slice: replicate :: (C sh, Storable a) => sh -> a -> T () sh a
Files
- comfort-blas.cabal +4/−2
- src/Numeric/BLAS/Matrix/RowMajor.hs +66/−2
- src/Numeric/BLAS/Slice.hs +60/−2
- src/Numeric/BLAS/Vector.hs +1/−1
- src/Numeric/BLAS/Vector/Slice.hs +82/−3
- test/Test/ComplexDouble/Numeric/BLAS/Vector.hs +112/−77
- test/Test/ComplexDouble/Numeric/BLAS/Vector/Slice.hs +170/−125
- test/Test/ComplexFloat/Numeric/BLAS/Vector.hs +112/−77
- test/Test/ComplexFloat/Numeric/BLAS/Vector/Slice.hs +170/−125
- test/Test/Double/Numeric/BLAS/Vector.hs +112/−77
- test/Test/Double/Numeric/BLAS/Vector/Slice.hs +170/−125
- test/Test/Float/Numeric/BLAS/Vector.hs +112/−77
- test/Test/Float/Numeric/BLAS/Vector/Slice.hs +170/−125
- test/Test/Numeric/BLAS/Slice.hs +64/−23
comfort-blas.cabal view
@@ -1,6 +1,6 @@ Cabal-Version: 2.2 Name: comfort-blas-Version: 0.0.1+Version: 0.0.2 License: BSD-3-Clause License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>@@ -17,7 +17,7 @@ Makefile Source-Repository this- Tag: 0.0.1+ Tag: 0.0.2 Type: darcs Location: https://hub.darcs.net/thielema/comfort-blas/ @@ -30,7 +30,9 @@ blas-ffi >=0.0 && <0.2, netlib-ffi >=0.1.1 && <0.2, comfort-array >=0.5.2 && <0.6,+ storablevector >=0.2 && <0.3, guarded-allocation >=0.0 && <0.1,+ non-empty >=0.3.1 && <0.4, containers >=0.4 && <0.8, semigroups >=0.19 && <0.21, deepseq >=1.3 && <1.6,
src/Numeric/BLAS/Matrix/RowMajor.hs view
@@ -11,12 +11,15 @@ recomplex, scaleRows, scaleColumns,+ multiplyVectorLeft,+ multiplyVectorRight, ) where +import qualified Numeric.BLAS.Matrix.Modifier as Modifier import qualified Numeric.BLAS.Private as Private import Numeric.BLAS.Matrix.Modifier (Conjugation(NonConjugated,Conjugated)) import Numeric.BLAS.Scalar (zero, one)-import Numeric.BLAS.Private (ShapeInt, shapeInt, ComplexShape, pointerSeq)+import Numeric.BLAS.Private (ShapeInt, shapeInt, ComplexShape, pointerSeq, fill) import qualified Numeric.BLAS.FFI.Generic as Blas import qualified Numeric.Netlib.Utility as Call@@ -33,8 +36,9 @@ import qualified Data.Array.Comfort.Shape as Shape import Data.Array.Comfort.Storable.Unchecked (Array(Array)) -import Data.Complex (Complex) import Data.Foldable (forM_)+import Data.Complex (Complex)+import Data.Tuple.HT (swap) type Matrix height width = Array (height,width)@@ -178,3 +182,63 @@ akPtr incaPtr betaPtr bkPtr incbPtr) (pointerSeq n aPtr) (pointerSeq n bPtr)+++multiplyVectorLeft ::+ (Eq height, Shape.C height, Shape.C width, Class.Floating a) =>+ Vector height a -> Matrix height width a -> Vector width a+multiplyVectorLeft = multiplyVector nonTransposed++multiplyVectorRight ::+ (Shape.C height, Shape.C width, Eq width, Class.Floating a) =>+ Matrix height width a -> Vector width a -> Vector height a+multiplyVectorRight = flip $ multiplyVector transposed+++data Transposition heightA widthA heightB widthB =+ Transposition+ Modifier.Transposition Char+ ((heightA,widthA) -> (heightB,widthB))++transposed :: Transposition height width width height+transposed = Transposition Modifier.Transposed 'T' swap++nonTransposed :: Transposition height width height width+nonTransposed = Transposition Modifier.NonTransposed 'N' id++multiplyVector ::+ (Shape.C heightB, Shape.C widthB, Eq heightB, Class.Floating a) =>+ Transposition heightA widthA heightB widthB ->+ Vector heightB a -> Matrix heightA widthA a -> Vector widthB a+multiplyVector+ (Transposition trans transChar assignDims)+ (Array sh x) (Array shA a) =+ let (height,width) = assignDims shA in+ Array.unsafeCreateWithSize width $ \m0 yPtr -> do+ Call.assert+ "Matrix.RowMajor.multiplyVector: shapes mismatch"+ (height == sh)+ let n0 = Shape.size height+ let (m,n) =+ case trans of+ Modifier.NonTransposed -> (m0,n0)+ Modifier.Transposed -> (n0,m0)+ if n==0+ then fill zero m yPtr+ else evalContT $ do++ let lda = m+ transPtr <- Call.char transChar+ mPtr <- Call.cint m+ nPtr <- Call.cint n+ alphaPtr <- Call.number one+ aPtr <- ContT $ withForeignPtr a+ ldaPtr <- Call.leadingDim lda+ xPtr <- ContT $ withForeignPtr x+ incxPtr <- Call.cint 1+ betaPtr <- Call.number zero+ incyPtr <- Call.cint 1+ liftIO $+ Blas.gemv+ transPtr mPtr nPtr alphaPtr aPtr ldaPtr+ xPtr incxPtr betaPtr yPtr incyPtr
src/Numeric/BLAS/Slice.hs view
@@ -8,9 +8,14 @@ import qualified Data.Traversable as Trav import qualified Data.List as List import Data.Map (Map)+import Data.Bool.HT (if') +import Text.Printf (printf) + {- $setup+>>> :set -XTypeOperators+>>> >>> import qualified Numeric.BLAS.Slice as Slice >>> import Test.Slice (shapeInt) >>>@@ -20,10 +25,19 @@ >>> import Data.Array.Comfort.Shape ((::+)((::+))) >>> import Data.Array.Comfort.Boxed ((!)) >>>->>> import Control.Applicative (liftA3, pure)+>>> 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)) (QC.choose (1,100)) (pure sh)@@ -33,6 +47,14 @@ >>> s <- QC.choose (0,100) >>> k <- QC.choose (1,100) >>> return (Slice.Cons s k shA, Slice.Cons s k shB)+>>>+>>> type ShapeInt = Shape.ZeroBased Int+>>>+>>> mapShape :: (shA -> shB) -> Slice.T shA -> Slice.T shB+>>> mapShape f (Slice.Cons s k sh) = Slice.Cons s k (f sh)+>>>+>>> toShapeInt :: (Shape.C sh) => Slice.T sh -> Slice.T ShapeInt+>>> toShapeInt = mapShape (shapeInt . Shape.size) -} @@ -92,6 +114,10 @@ Cons (s + k * Shape.size sh0) k (sh1,sh) +diagonal :: (Shape.C sh) => T (Shape.Square sh) -> T sh+diagonal (Cons s k (Shape.Square sh)) =+ Cons s (k * (Shape.size sh + 1)) sh+ cartesianFromSquare :: T (Shape.Square sh) -> T (sh,sh) cartesianFromSquare (Cons s k (Shape.Square sh)) = Cons s k (sh,sh) @@ -141,10 +167,42 @@ right (Cons s k (sh0::+sh1)) = Cons (s + k * Shape.size sh0) k sh1 +type ShapeInt = Shape.ZeroBased Int+ {- |+prop> QC.forAll (genSlice =<< genAppend) $ \slice -> Slice.take (case Slice.shape slice of (sh::+_) -> Shape.size sh) (toShapeInt slice) == toShapeInt (Slice.left slice)+-}+take :: Int -> T ShapeInt -> T ShapeInt+take m (Cons s k (Shape.ZeroBased n)) =+ if m<0+ then error $ printf "Slice.take: negative size %d" m+ else Cons s k $ Shape.ZeroBased $ min m n++{- |+prop> QC.forAll (genSlice =<< genAppend) $ \slice -> Slice.drop (case Slice.shape slice of (sh::+_) -> Shape.size sh) (toShapeInt slice) == toShapeInt (Slice.right slice)+-}+drop :: Int -> T ShapeInt -> T ShapeInt+drop m (Cons s k (Shape.ZeroBased n)) =+ if m<0+ then error $ printf "Slice.drop: negative size %d" m+ else Cons (s + k * m) k $ Shape.ZeroBased $ max 0 $ n-m++{- |+@Slice.sub start size@++prop> \(QC.NonNegative n) -> QC.forAll (genSlice $ shapeInt n) $ \slice (QC.NonNegative start) (QC.NonNegative size) -> Slice.sub start size slice == Slice.take size (Slice.drop start slice)+-}+sub :: Int -> Int -> T ShapeInt -> T ShapeInt+sub start_ size (Cons s k (Shape.ZeroBased n)) =+ if' (start_<0) (error $ printf "Slice.sub: negative start %d" start_) $+ if' (size <0) (error $ printf "Slice.sub: negative size %d" size) $+ Cons (s + k * start_) k $ Shape.ZeroBased $ max 0 $ min size $ n-start_+++{- | prop> 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) -prop> 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)+prop> 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) -} map :: (Shape.C sh) => T (Map k sh) -> Map k (T sh) map (Cons s k m) =
src/Numeric/BLAS/Vector.hs view
@@ -76,7 +76,7 @@ import Control.Monad.IO.Class (liftIO) import Control.Monad.ST (runST) import Control.Monad (when, fmap, return, (=<<))-import Control.Applicative (liftA3, (<$>), (*>))+import Control.Applicative (liftA3, (<$>)) import qualified Data.Array.Comfort.Storable.Mutable.Unchecked as UMutArray import qualified Data.Array.Comfort.Storable.Mutable as MutArray
src/Numeric/BLAS/Vector/Slice.hs view
@@ -7,10 +7,15 @@ RealOf, ComplexOf, slice,+ fromStorableVector, fromVector, toVector, extract, access,+ replicate,+ append,+ Chunk, chunk,+ concat, dot, inner, sum, absSum,@@ -70,7 +75,12 @@ import qualified Data.Array.Comfort.Storable.Unchecked as Array import qualified Data.Array.Comfort.Shape as Shape+import qualified Data.StorableVector.Base as SVB+import qualified Data.Foldable as Fold+import qualified Data.NonEmpty as NonEmpty+import qualified Data.List as List import Data.Array.Comfort.Storable.Unchecked (Array(Array))+import Data.Array.Comfort.Shape ((::+)((::+))) import Text.Show (Show) import Data.Function (($), (.))@@ -104,7 +114,7 @@ >>> import qualified Data.Array.Comfort.Shape as Shape >>> import qualified Data.List as List >>> import Numeric.BLAS.Vector ((+++), (|+|))->>> import Numeric.BLAS.Scalar (RealOf, absolute, minusOne)+>>> import Numeric.BLAS.Scalar (RealOf, absolute, realPart, minusOne) >>> import Data.Array.Comfort.Shape ((::+)((::+))) >>> import Data.Tuple.HT (mapPair) >>> import Data.Complex (Complex)@@ -149,8 +159,8 @@ >>> Vector.Vector (sh0 ::+ (sh, sh1) ::+ sh2) a -> >>> VectorSlice.T (sh0 ::+ (sh, sh1) ::+ sh2) sh a >>> takeColumn c =->>> VectorSlice.slice->>> (Slice.column c . Slice.left . Slice.right) . VectorSlice.fromVector+>>> VectorSlice.slice (Slice.column c . Slice.left . Slice.right) .+>>> VectorSlice.fromVector >>> >>> listFromSlice :: >>> (Shape.C sh, Class.Floating a) => VectorSlice.T shA sh a -> [a]@@ -270,6 +280,17 @@ <*> pure syPtr <*> Call.cint 1 +{- |+Non-copying conversion from @StorableVector@.+-}+fromStorableVector :: SVB.Vector a -> T ShapeInt ShapeInt a+fromStorableVector xs =+ case SVB.toForeignPtr xs of+ (buffer, s, l) ->+ Cons+ (Slice.Cons s 1 (Shape.ZeroBased l))+ (Array (Shape.ZeroBased (s+l)) buffer)+ fromVector :: (Shape.C sh) => Vector sh a -> T sh sh a fromVector xs = Cons (Slice.fromShape $ Array.shape xs) xs @@ -296,6 +317,64 @@ Shape.DeferredIndex (s + k * Shape.offset ssh ix) (!) = access +++{- |+prop> QC.forAll genShape $ \shape a -> VectorSlice.toVector (VectorSlice.replicate shape a) == Vector.constant shape (a :: Number_)+-}+replicate :: (Shape.C sh, Storable a) => sh -> a -> T () sh a+replicate sh a =+ Cons+ (Slice.Cons 0 0 sh)+ (Array.fromAssociations a () [])+++type ShapeInt = Shape.ZeroBased Int++{- |+>>> List.map realPart $ Vector.toList $ VectorSlice.append (VectorSlice.fromVector $ Vector.autoFromList [3,1,4,1]) (VectorSlice.replicate (Shape.ZeroBased (3::Int)) (0::Number_))+[3.0,1.0,4.0,1.0,0.0,0.0,0.0]+-}+append ::+ (Shape.C sliceA, Shape.C sliceB, Class.Floating a) =>+ T shA sliceA a -> T shB sliceB a -> Vector (sliceA::+sliceB) a+append xs ys =+ Array.unsafeCreate (shape xs ::+ shape ys) $ \zPtr ->+ evalContT $ do+ let chunkX = chunk $ mapShape (Shape.ZeroBased . Shape.size) xs+ let chunkY = chunk $ mapShape (Shape.ZeroBased . Shape.size) ys+ nxPtr <- Call.cint $ chunkSize chunkX+ nyPtr <- Call.cint $ chunkSize chunkY+ (xPtr, incxPtr) <- chunkData chunkX+ (yPtr, incyPtr) <- chunkData chunkY+ inczPtr <- Call.cint 1+ liftIO $ Blas.copy nxPtr xPtr incxPtr zPtr inczPtr+ liftIO $ Blas.copy nyPtr yPtr incyPtr+ (advancePtr zPtr $ chunkSize chunkX) inczPtr++data Chunk a =+ Chunk {+ chunkSize :: Int,+ chunkData :: ContT () IO (Ptr a, Ptr CInt)+ }++chunk :: (Storable a) => T sh ShapeInt a -> Chunk a+chunk x@(Cons slc _dat) = Chunk (Shape.size $ Slice.shape slc) (sliceArg x)++{- |+>>> List.map realPart $ Vector.toList $ let matrix = Vector.fromList (Shape.ZeroBased (4::Int), Shape.ZeroBased (3::Int)) $ map (\x -> fromInteger x :: Number_) [0 ..] in VectorSlice.concat $ map (\k -> VectorSlice.chunk (VectorSlice.slice (Slice.column k) $ VectorSlice.fromVector matrix)) [0,1,2]+[0.0,3.0,6.0,9.0,1.0,4.0,7.0,10.0,2.0,5.0,8.0,11.0]+-}+concat :: (Class.Floating a) => [Chunk a] -> Vector ShapeInt a+concat xs =+ let offsets = NonEmpty.scanl (+) 0 $ List.map chunkSize xs+ in Array.unsafeCreate (Shape.ZeroBased $ NonEmpty.last offsets) $ \yPtr ->+ Fold.for_ (List.zip (NonEmpty.flatten offsets) xs) $ \(offset, x) ->+ evalContT $ do+ nPtr <- Call.cint $ chunkSize x+ (xPtr, incxPtr) <- chunkData x+ incyPtr <- Call.cint 1+ liftIO $ Blas.copy nPtr xPtr incxPtr (advancePtr yPtr offset) incyPtr dot ::
test/Test/ComplexDouble/Numeric/BLAS/Vector.hs view
@@ -104,178 +104,213 @@ test = do DocTest.printPrefix "Numeric.BLAS.Vector:239: " {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs)))+ forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs))+ ) DocTest.printPrefix "Numeric.BLAS.Vector:248: " {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_))+ Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:249: " {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_))+ Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:250: " {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_))+ Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:252: " {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs))+ forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:253: " {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs))+ forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:254: " {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs)+ forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:269: " {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList []))+ cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList [])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:270: " {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1]))+ cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:271: " {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3]))+ cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:272: " {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6]))+ cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:274: " {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}- (forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs))+ forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:291: " {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_))+ QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:326: " {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys)+ forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys+ ) DocTest.printPrefix "Numeric.BLAS.Vector:379: " {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs))+ forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:439: " {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))+ forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector:463: "+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.example(+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}+ Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]+ )+ [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]] DocTest.printPrefix "Numeric.BLAS.Vector:466: " {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm)+ forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm+ ) DocTest.printPrefix "Numeric.BLAS.Vector:467: " {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs)+ forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:468: " {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)- DocTest.printPrefix "Numeric.BLAS.Vector:463: "-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.example-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])- [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]]- DocTest.printPrefix "Numeric.BLAS.Vector:515: "-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)+ forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym+ ) DocTest.printPrefix "Numeric.BLAS.Vector:512: " {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.example+ DocTest.example( {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])+ Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]+ ) [ExpectedLine [LineChunk "(1,3.0 :+ 4.0)"]]+ DocTest.printPrefix "Numeric.BLAS.Vector:515: "+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property(+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:548: " {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_))))+ QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_)))+ ) DocTest.printPrefix "Numeric.BLAS.Vector:558: " {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs))+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:559: " {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs))+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:560: " {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs))+ forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:576: " {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs)+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:606: " {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs)+ forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:607: " {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs)+ forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:676: " {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs)+ forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:677: " {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys)+ forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys+ ) DocTest.printPrefix "Numeric.BLAS.Vector:707: " {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs))+ forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:720: " {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs))+ QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:737: " {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs)+ forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:745: " {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)+ forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys+ )
test/Test/ComplexDouble/Numeric/BLAS/Vector/Slice.hs view
@@ -1,13 +1,14 @@ -- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Vector/Slice.hs-{-# LINE 87 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 97 "src/Numeric/BLAS/Vector/Slice.hs" #-} {-# OPTIONS_GHC -XTypeOperators #-} {-# OPTIONS_GHC -XGADTs #-} module Test.ComplexDouble.Numeric.BLAS.Vector.Slice where +import Test.DocTest.Base import qualified Test.DocTest.Driver as DocTest -{-# LINE 90 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 100 "src/Numeric/BLAS/Vector/Slice.hs" #-} import qualified Test.Slice as TestSlice import Test.ComplexDouble.Numeric.BLAS.Vector (maxElem, maxDim, genVector, number_, real_, complex_)@@ -25,7 +26,7 @@ import qualified Data.Array.Comfort.Shape as Shape import qualified Data.List as List import Numeric.BLAS.Vector ((+++), (|+|))-import Numeric.BLAS.Scalar (RealOf, absolute, minusOne)+import Numeric.BLAS.Scalar (RealOf, absolute, realPart, minusOne) import Data.Array.Comfort.Shape ((::+)((::+))) import Data.Tuple.HT (mapPair) import Data.Complex (Complex)@@ -70,8 +71,8 @@ Vector.Vector (sh0 ::+ (sh, sh1) ::+ sh2) a -> VectorSlice.T (sh0 ::+ (sh, sh1) ::+ sh2) sh a takeColumn c =- VectorSlice.slice- (Slice.column c . Slice.left . Slice.right) . VectorSlice.fromVector+ VectorSlice.slice (Slice.column c . Slice.left . Slice.right) .+ VectorSlice.fromVector listFromSlice :: (Shape.C sh, Class.Floating a) => VectorSlice.T shA sh a -> [a]@@ -129,123 +130,167 @@ test :: DocTest.T () test = do- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:280: "-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_))))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:282: "-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:314: "-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:315: "-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:398: "-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:471: "-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs)))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:482: "-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs)))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:497: "-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:498: "-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:499: "-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:546: "-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:571: "-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_))))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:582: "-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:583: "-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:599: "-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:629: "-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:630: "-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:689: "-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:690: "-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:715: "-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:728: "-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:745: "-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:753: "-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:877: "-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis)+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:301: "+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_)))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:303: "+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:323: "+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll genShape $ \shape a -> VectorSlice.toVector (VectorSlice.replicate shape a) == Vector.constant shape (a :: Number_)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:335: "+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.example(+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ List.map realPart $ Vector.toList $ VectorSlice.append (VectorSlice.fromVector $ Vector.autoFromList [3,1,4,1]) (VectorSlice.replicate (Shape.ZeroBased (3::Int)) (0::Number_))+ )+ [ExpectedLine [LineChunk "[3.0,1.0,4.0,1.0,0.0,0.0,0.0]"]]+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:365: "+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.example(+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ List.map realPart $ Vector.toList $ let matrix = Vector.fromList (Shape.ZeroBased (4::Int), Shape.ZeroBased (3::Int)) $ map (\x -> fromInteger x :: Number_) [0 ..] in VectorSlice.concat $ map (\k -> VectorSlice.chunk (VectorSlice.slice (Slice.column k) $ VectorSlice.fromVector matrix)) [0,1,2]+ )+ [ExpectedLine [LineChunk "[0.0,3.0,6.0,9.0,1.0,4.0,7.0,10.0,2.0,5.0,8.0,11.0]"]]+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:393: "+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:394: "+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:477: "+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:550: "+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:561: "+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:576: "+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:577: "+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:578: "+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:625: "+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:650: "+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_)))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:661: "+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:662: "+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:678: "+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:708: "+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:709: "+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:768: "+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:769: "+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:794: "+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:807: "+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:824: "+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:832: "+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:956: "+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis+ )
test/Test/ComplexFloat/Numeric/BLAS/Vector.hs view
@@ -104,178 +104,213 @@ test = do DocTest.printPrefix "Numeric.BLAS.Vector:239: " {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs)))+ forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs))+ ) DocTest.printPrefix "Numeric.BLAS.Vector:248: " {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_))+ Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:249: " {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_))+ Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:250: " {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_))+ Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:252: " {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs))+ forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:253: " {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs))+ forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:254: " {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs)+ forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:269: " {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList []))+ cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList [])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:270: " {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1]))+ cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:271: " {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3]))+ cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:272: " {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6]))+ cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:274: " {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}- (forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs))+ forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:291: " {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_))+ QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:326: " {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys)+ forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys+ ) DocTest.printPrefix "Numeric.BLAS.Vector:379: " {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs))+ forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:439: " {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))+ forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector:463: "+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.example(+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}+ Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]+ )+ [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]] DocTest.printPrefix "Numeric.BLAS.Vector:466: " {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm)+ forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm+ ) DocTest.printPrefix "Numeric.BLAS.Vector:467: " {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs)+ forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:468: " {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)- DocTest.printPrefix "Numeric.BLAS.Vector:463: "-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.example-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])- [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]]- DocTest.printPrefix "Numeric.BLAS.Vector:515: "-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)+ forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym+ ) DocTest.printPrefix "Numeric.BLAS.Vector:512: " {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.example+ DocTest.example( {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])+ Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]+ ) [ExpectedLine [LineChunk "(1,3.0 :+ 4.0)"]]+ DocTest.printPrefix "Numeric.BLAS.Vector:515: "+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property(+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:548: " {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_))))+ QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_)))+ ) DocTest.printPrefix "Numeric.BLAS.Vector:558: " {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs))+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:559: " {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs))+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:560: " {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs))+ forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:576: " {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs)+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:606: " {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs)+ forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:607: " {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs)+ forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:676: " {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs)+ forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:677: " {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys)+ forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys+ ) DocTest.printPrefix "Numeric.BLAS.Vector:707: " {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs))+ forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:720: " {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs))+ QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:737: " {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs)+ forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:745: " {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)+ forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys+ )
test/Test/ComplexFloat/Numeric/BLAS/Vector/Slice.hs view
@@ -1,13 +1,14 @@ -- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Vector/Slice.hs-{-# LINE 87 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 97 "src/Numeric/BLAS/Vector/Slice.hs" #-} {-# OPTIONS_GHC -XTypeOperators #-} {-# OPTIONS_GHC -XGADTs #-} module Test.ComplexFloat.Numeric.BLAS.Vector.Slice where +import Test.DocTest.Base import qualified Test.DocTest.Driver as DocTest -{-# LINE 90 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 100 "src/Numeric/BLAS/Vector/Slice.hs" #-} import qualified Test.Slice as TestSlice import Test.ComplexFloat.Numeric.BLAS.Vector (maxElem, maxDim, genVector, number_, real_, complex_)@@ -25,7 +26,7 @@ import qualified Data.Array.Comfort.Shape as Shape import qualified Data.List as List import Numeric.BLAS.Vector ((+++), (|+|))-import Numeric.BLAS.Scalar (RealOf, absolute, minusOne)+import Numeric.BLAS.Scalar (RealOf, absolute, realPart, minusOne) import Data.Array.Comfort.Shape ((::+)((::+))) import Data.Tuple.HT (mapPair) import Data.Complex (Complex)@@ -70,8 +71,8 @@ Vector.Vector (sh0 ::+ (sh, sh1) ::+ sh2) a -> VectorSlice.T (sh0 ::+ (sh, sh1) ::+ sh2) sh a takeColumn c =- VectorSlice.slice- (Slice.column c . Slice.left . Slice.right) . VectorSlice.fromVector+ VectorSlice.slice (Slice.column c . Slice.left . Slice.right) .+ VectorSlice.fromVector listFromSlice :: (Shape.C sh, Class.Floating a) => VectorSlice.T shA sh a -> [a]@@ -129,123 +130,167 @@ test :: DocTest.T () test = do- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:280: "-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_))))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:282: "-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:314: "-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:315: "-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:398: "-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:471: "-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs)))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:482: "-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs)))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:497: "-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:498: "-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:499: "-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:546: "-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:571: "-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_))))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:582: "-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:583: "-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:599: "-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:629: "-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:630: "-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:689: "-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:690: "-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:715: "-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:728: "-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:745: "-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:753: "-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:877: "-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis)+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:301: "+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_)))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:303: "+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:323: "+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll genShape $ \shape a -> VectorSlice.toVector (VectorSlice.replicate shape a) == Vector.constant shape (a :: Number_)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:335: "+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.example(+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ List.map realPart $ Vector.toList $ VectorSlice.append (VectorSlice.fromVector $ Vector.autoFromList [3,1,4,1]) (VectorSlice.replicate (Shape.ZeroBased (3::Int)) (0::Number_))+ )+ [ExpectedLine [LineChunk "[3.0,1.0,4.0,1.0,0.0,0.0,0.0]"]]+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:365: "+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.example(+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ List.map realPart $ Vector.toList $ let matrix = Vector.fromList (Shape.ZeroBased (4::Int), Shape.ZeroBased (3::Int)) $ map (\x -> fromInteger x :: Number_) [0 ..] in VectorSlice.concat $ map (\k -> VectorSlice.chunk (VectorSlice.slice (Slice.column k) $ VectorSlice.fromVector matrix)) [0,1,2]+ )+ [ExpectedLine [LineChunk "[0.0,3.0,6.0,9.0,1.0,4.0,7.0,10.0,2.0,5.0,8.0,11.0]"]]+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:393: "+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:394: "+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:477: "+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:550: "+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:561: "+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:576: "+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:577: "+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:578: "+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:625: "+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:650: "+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_)))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:661: "+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:662: "+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:678: "+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:708: "+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:709: "+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:768: "+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:769: "+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:794: "+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:807: "+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:824: "+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:832: "+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:956: "+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis+ )
test/Test/Double/Numeric/BLAS/Vector.hs view
@@ -104,178 +104,213 @@ test = do DocTest.printPrefix "Numeric.BLAS.Vector:239: " {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs)))+ forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs))+ ) DocTest.printPrefix "Numeric.BLAS.Vector:248: " {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_))+ Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:249: " {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_))+ Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:250: " {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_))+ Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:252: " {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs))+ forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:253: " {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs))+ forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:254: " {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs)+ forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:269: " {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList []))+ cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList [])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:270: " {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1]))+ cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:271: " {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3]))+ cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:272: " {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6]))+ cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:274: " {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}- (forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs))+ forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:291: " {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_))+ QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:326: " {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys)+ forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys+ ) DocTest.printPrefix "Numeric.BLAS.Vector:379: " {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs))+ forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:439: " {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))+ forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector:463: "+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.example(+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}+ Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]+ )+ [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]] DocTest.printPrefix "Numeric.BLAS.Vector:466: " {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm)+ forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm+ ) DocTest.printPrefix "Numeric.BLAS.Vector:467: " {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs)+ forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:468: " {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)- DocTest.printPrefix "Numeric.BLAS.Vector:463: "-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.example-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])- [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]]- DocTest.printPrefix "Numeric.BLAS.Vector:515: "-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)+ forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym+ ) DocTest.printPrefix "Numeric.BLAS.Vector:512: " {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.example+ DocTest.example( {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])+ Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]+ ) [ExpectedLine [LineChunk "(1,3.0 :+ 4.0)"]]+ DocTest.printPrefix "Numeric.BLAS.Vector:515: "+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property(+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:548: " {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_))))+ QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_)))+ ) DocTest.printPrefix "Numeric.BLAS.Vector:558: " {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs))+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:559: " {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs))+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:560: " {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs))+ forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:576: " {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs)+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:606: " {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs)+ forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:607: " {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs)+ forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:676: " {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs)+ forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:677: " {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys)+ forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys+ ) DocTest.printPrefix "Numeric.BLAS.Vector:707: " {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs))+ forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:720: " {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs))+ QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:737: " {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs)+ forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:745: " {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)+ forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys+ )
test/Test/Double/Numeric/BLAS/Vector/Slice.hs view
@@ -1,13 +1,14 @@ -- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Vector/Slice.hs-{-# LINE 87 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 97 "src/Numeric/BLAS/Vector/Slice.hs" #-} {-# OPTIONS_GHC -XTypeOperators #-} {-# OPTIONS_GHC -XGADTs #-} module Test.Double.Numeric.BLAS.Vector.Slice where +import Test.DocTest.Base import qualified Test.DocTest.Driver as DocTest -{-# LINE 90 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 100 "src/Numeric/BLAS/Vector/Slice.hs" #-} import qualified Test.Slice as TestSlice import Test.Double.Numeric.BLAS.Vector (maxElem, maxDim, genVector, number_, real_, complex_)@@ -25,7 +26,7 @@ import qualified Data.Array.Comfort.Shape as Shape import qualified Data.List as List import Numeric.BLAS.Vector ((+++), (|+|))-import Numeric.BLAS.Scalar (RealOf, absolute, minusOne)+import Numeric.BLAS.Scalar (RealOf, absolute, realPart, minusOne) import Data.Array.Comfort.Shape ((::+)((::+))) import Data.Tuple.HT (mapPair) import Data.Complex (Complex)@@ -70,8 +71,8 @@ Vector.Vector (sh0 ::+ (sh, sh1) ::+ sh2) a -> VectorSlice.T (sh0 ::+ (sh, sh1) ::+ sh2) sh a takeColumn c =- VectorSlice.slice- (Slice.column c . Slice.left . Slice.right) . VectorSlice.fromVector+ VectorSlice.slice (Slice.column c . Slice.left . Slice.right) .+ VectorSlice.fromVector listFromSlice :: (Shape.C sh, Class.Floating a) => VectorSlice.T shA sh a -> [a]@@ -129,123 +130,167 @@ test :: DocTest.T () test = do- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:280: "-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_))))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:282: "-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:314: "-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:315: "-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:398: "-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:471: "-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs)))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:482: "-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs)))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:497: "-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:498: "-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:499: "-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:546: "-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:571: "-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_))))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:582: "-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:583: "-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:599: "-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:629: "-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:630: "-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:689: "-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:690: "-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:715: "-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:728: "-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:745: "-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:753: "-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:877: "-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis)+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:301: "+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_)))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:303: "+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:323: "+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll genShape $ \shape a -> VectorSlice.toVector (VectorSlice.replicate shape a) == Vector.constant shape (a :: Number_)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:335: "+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.example(+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ List.map realPart $ Vector.toList $ VectorSlice.append (VectorSlice.fromVector $ Vector.autoFromList [3,1,4,1]) (VectorSlice.replicate (Shape.ZeroBased (3::Int)) (0::Number_))+ )+ [ExpectedLine [LineChunk "[3.0,1.0,4.0,1.0,0.0,0.0,0.0]"]]+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:365: "+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.example(+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ List.map realPart $ Vector.toList $ let matrix = Vector.fromList (Shape.ZeroBased (4::Int), Shape.ZeroBased (3::Int)) $ map (\x -> fromInteger x :: Number_) [0 ..] in VectorSlice.concat $ map (\k -> VectorSlice.chunk (VectorSlice.slice (Slice.column k) $ VectorSlice.fromVector matrix)) [0,1,2]+ )+ [ExpectedLine [LineChunk "[0.0,3.0,6.0,9.0,1.0,4.0,7.0,10.0,2.0,5.0,8.0,11.0]"]]+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:393: "+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:394: "+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:477: "+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:550: "+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:561: "+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:576: "+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:577: "+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:578: "+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:625: "+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:650: "+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_)))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:661: "+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:662: "+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:678: "+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:708: "+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:709: "+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:768: "+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:769: "+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:794: "+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:807: "+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:824: "+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:832: "+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:956: "+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis+ )
test/Test/Float/Numeric/BLAS/Vector.hs view
@@ -104,178 +104,213 @@ test = do DocTest.printPrefix "Numeric.BLAS.Vector:239: " {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs)))+ forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs))+ ) DocTest.printPrefix "Numeric.BLAS.Vector:248: " {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_))+ Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:249: " {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_))+ Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:250: " {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_))+ Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:252: " {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs))+ forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:253: " {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs))+ forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:254: " {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs)+ forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:269: " {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList []))+ cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList [])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:270: " {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1]))+ cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:271: " {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3]))+ cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:272: " {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}- (cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6]))+ cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6])+ ) DocTest.printPrefix "Numeric.BLAS.Vector:274: " {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}- (forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs))+ forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:291: " {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_))+ QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:326: " {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys)+ forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys+ ) DocTest.printPrefix "Numeric.BLAS.Vector:379: " {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs))+ forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:439: " {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))+ forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector:463: "+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.example(+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}+ Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]+ )+ [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]] DocTest.printPrefix "Numeric.BLAS.Vector:466: " {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm)+ forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm+ ) DocTest.printPrefix "Numeric.BLAS.Vector:467: " {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs)+ forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:468: " {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)- DocTest.printPrefix "Numeric.BLAS.Vector:463: "-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.example-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])- [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]]- DocTest.printPrefix "Numeric.BLAS.Vector:515: "-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)+ forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym+ ) DocTest.printPrefix "Numeric.BLAS.Vector:512: " {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.example+ DocTest.example( {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}- (Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])+ Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]+ ) [ExpectedLine [LineChunk "(1,3.0 :+ 4.0)"]]+ DocTest.printPrefix "Numeric.BLAS.Vector:515: "+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property(+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:548: " {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_))))+ QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_)))+ ) DocTest.printPrefix "Numeric.BLAS.Vector:558: " {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs))+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:559: " {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs))+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:560: " {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs))+ forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:576: " {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}- (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs)+ forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:606: " {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs)+ forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:607: " {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs)+ forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:676: " {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs)+ forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:677: " {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys)+ forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys+ ) DocTest.printPrefix "Numeric.BLAS.Vector:707: " {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}- (forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs))+ forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:720: " {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs))+ QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs)+ ) DocTest.printPrefix "Numeric.BLAS.Vector:737: " {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs)+ forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs+ ) DocTest.printPrefix "Numeric.BLAS.Vector:745: " {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property+ DocTest.property( {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}- (forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)+ forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys+ )
test/Test/Float/Numeric/BLAS/Vector/Slice.hs view
@@ -1,13 +1,14 @@ -- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Vector/Slice.hs-{-# LINE 87 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 97 "src/Numeric/BLAS/Vector/Slice.hs" #-} {-# OPTIONS_GHC -XTypeOperators #-} {-# OPTIONS_GHC -XGADTs #-} module Test.Float.Numeric.BLAS.Vector.Slice where +import Test.DocTest.Base import qualified Test.DocTest.Driver as DocTest -{-# LINE 90 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 100 "src/Numeric/BLAS/Vector/Slice.hs" #-} import qualified Test.Slice as TestSlice import Test.Float.Numeric.BLAS.Vector (maxElem, maxDim, genVector, number_, real_, complex_)@@ -25,7 +26,7 @@ import qualified Data.Array.Comfort.Shape as Shape import qualified Data.List as List import Numeric.BLAS.Vector ((+++), (|+|))-import Numeric.BLAS.Scalar (RealOf, absolute, minusOne)+import Numeric.BLAS.Scalar (RealOf, absolute, realPart, minusOne) import Data.Array.Comfort.Shape ((::+)((::+))) import Data.Tuple.HT (mapPair) import Data.Complex (Complex)@@ -70,8 +71,8 @@ Vector.Vector (sh0 ::+ (sh, sh1) ::+ sh2) a -> VectorSlice.T (sh0 ::+ (sh, sh1) ::+ sh2) sh a takeColumn c =- VectorSlice.slice- (Slice.column c . Slice.left . Slice.right) . VectorSlice.fromVector+ VectorSlice.slice (Slice.column c . Slice.left . Slice.right) .+ VectorSlice.fromVector listFromSlice :: (Shape.C sh, Class.Floating a) => VectorSlice.T shA sh a -> [a]@@ -129,123 +130,167 @@ test :: DocTest.T () test = do- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:280: "-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_))))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:282: "-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:314: "-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:315: "-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:398: "-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:471: "-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs)))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:482: "-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs)))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:497: "-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:498: "-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:499: "-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:546: "-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:571: "-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_))))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:582: "-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:583: "-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:599: "-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:629: "-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:630: "-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:689: "-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:690: "-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:715: "-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:728: "-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:745: "-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:753: "-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:877: "-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}- DocTest.property-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}- (forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis)+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:301: "+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_)))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:303: "+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:323: "+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll genShape $ \shape a -> VectorSlice.toVector (VectorSlice.replicate shape a) == Vector.constant shape (a :: Number_)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:335: "+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.example(+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ List.map realPart $ Vector.toList $ VectorSlice.append (VectorSlice.fromVector $ Vector.autoFromList [3,1,4,1]) (VectorSlice.replicate (Shape.ZeroBased (3::Int)) (0::Number_))+ )+ [ExpectedLine [LineChunk "[3.0,1.0,4.0,1.0,0.0,0.0,0.0]"]]+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:365: "+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.example(+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ List.map realPart $ Vector.toList $ let matrix = Vector.fromList (Shape.ZeroBased (4::Int), Shape.ZeroBased (3::Int)) $ map (\x -> fromInteger x :: Number_) [0 ..] in VectorSlice.concat $ map (\k -> VectorSlice.chunk (VectorSlice.slice (Slice.column k) $ VectorSlice.fromVector matrix)) [0,1,2]+ )+ [ExpectedLine [LineChunk "[0.0,3.0,6.0,9.0,1.0,4.0,7.0,10.0,2.0,5.0,8.0,11.0]"]]+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:393: "+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:394: "+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:477: "+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:550: "+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:561: "+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:576: "+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:577: "+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:578: "+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:625: "+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:650: "+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_)))+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:661: "+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:662: "+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:678: "+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:708: "+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:709: "+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:768: "+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:769: "+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:794: "+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:807: "+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:824: "+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:832: "+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys)+ )+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:956: "+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.property(+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis+ )
test/Test/Numeric/BLAS/Slice.hs view
@@ -1,11 +1,13 @@ -- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Slice.hs-{-# LINE 13 "src/Numeric/BLAS/Slice.hs" #-}+{-# LINE 16 "src/Numeric/BLAS/Slice.hs" #-} +{-# OPTIONS_GHC -XTypeOperators #-}+ module Test.Numeric.BLAS.Slice where import qualified Test.DocTest.Driver as DocTest -{-# LINE 14 "src/Numeric/BLAS/Slice.hs" #-}+{-# LINE 19 "src/Numeric/BLAS/Slice.hs" #-} import qualified Numeric.BLAS.Slice as Slice import Test.Slice (shapeInt) @@ -15,10 +17,19 @@ import Data.Array.Comfort.Shape ((::+)((::+))) import Data.Array.Comfort.Boxed ((!)) -import Control.Applicative (liftA3, pure)+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)) (QC.choose (1,100)) (pure sh)@@ -29,25 +40,55 @@ k <- QC.choose (1,100) return (Slice.Cons s k shA, Slice.Cons s k shB) +type ShapeInt = Shape.ZeroBased Int++mapShape :: (shA -> shB) -> Slice.T shA -> Slice.T shB+mapShape f (Slice.Cons s k sh) = Slice.Cons s k (f sh)++toShapeInt :: (Shape.C sh) => Slice.T sh -> Slice.T ShapeInt+toShapeInt = mapShape (shapeInt . Shape.size)+ test :: DocTest.T () test = do- DocTest.printPrefix "Numeric.BLAS.Slice:58: "-{-# LINE 58 "src/Numeric/BLAS/Slice.hs" #-}- DocTest.property-{-# LINE 58 "src/Numeric/BLAS/Slice.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.Slice:70: "-{-# LINE 70 "src/Numeric/BLAS/Slice.hs" #-}- DocTest.property-{-# LINE 70 "src/Numeric/BLAS/Slice.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.Slice:145: "-{-# LINE 145 "src/Numeric/BLAS/Slice.hs" #-}- DocTest.property-{-# LINE 145 "src/Numeric/BLAS/Slice.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.Slice:147: "-{-# LINE 147 "src/Numeric/BLAS/Slice.hs" #-}- DocTest.property-{-# LINE 147 "src/Numeric/BLAS/Slice.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))+ DocTest.printPrefix "Numeric.BLAS.Slice:80: "+{-# LINE 80 "src/Numeric/BLAS/Slice.hs" #-}+ DocTest.property(+{-# LINE 80 "src/Numeric/BLAS/Slice.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.Slice:92: "+{-# LINE 92 "src/Numeric/BLAS/Slice.hs" #-}+ DocTest.property(+{-# LINE 92 "src/Numeric/BLAS/Slice.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.Slice:173: "+{-# LINE 173 "src/Numeric/BLAS/Slice.hs" #-}+ DocTest.property(+{-# LINE 173 "src/Numeric/BLAS/Slice.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.Slice:182: "+{-# LINE 182 "src/Numeric/BLAS/Slice.hs" #-}+ DocTest.property(+{-# LINE 182 "src/Numeric/BLAS/Slice.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.Slice:193: "+{-# LINE 193 "src/Numeric/BLAS/Slice.hs" #-}+ DocTest.property(+{-# LINE 193 "src/Numeric/BLAS/Slice.hs" #-}+ \(QC.NonNegative n) -> QC.forAll (genSlice $ shapeInt n) $ \slice (QC.NonNegative start) (QC.NonNegative size) -> Slice.sub start size slice == Slice.take size (Slice.drop start slice)+ )+ DocTest.printPrefix "Numeric.BLAS.Slice:203: "+{-# LINE 203 "src/Numeric/BLAS/Slice.hs" #-}+ DocTest.property(+{-# LINE 203 "src/Numeric/BLAS/Slice.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.Slice:205: "+{-# LINE 205 "src/Numeric/BLAS/Slice.hs" #-}+ DocTest.property(+{-# LINE 205 "src/Numeric/BLAS/Slice.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)+ )