comfort-blas 0.0.0.1 → 0.0.1
raw patch · 11 files changed
+1234/−948 lines, 11 filesdep +semigroupsdep ~comfort-arraydep ~containersdep ~deepseqPVP ok
version bump matches the API change (PVP)
Dependencies added: semigroups
Dependency ranges changed: comfort-array, containers, deepseq
API changes (from Hackage documentation)
+ Numeric.BLAS.Vector: cyclicReverse :: (Integral n, Floating a) => Vector (Cyclic n) a -> Vector (Cyclic n) a
+ Numeric.BLAS.Vector: reverse :: (Integral n, Floating a) => Vector (ZeroBased n) a -> Vector (ZeroBased n) a
Files
- comfort-blas.cabal +6/−5
- src/Numeric/BLAS/Vector.hs +126/−56
- src/Numeric/BLAS/Vector/Slice.hs +2/−23
- test/Test/ComplexDouble/Numeric/BLAS/Vector.hs +201/−121
- test/Test/ComplexDouble/Numeric/BLAS/Vector/Slice.hs +74/−95
- test/Test/ComplexFloat/Numeric/BLAS/Vector.hs +201/−121
- test/Test/ComplexFloat/Numeric/BLAS/Vector/Slice.hs +74/−95
- test/Test/Double/Numeric/BLAS/Vector.hs +201/−121
- test/Test/Double/Numeric/BLAS/Vector/Slice.hs +74/−95
- test/Test/Float/Numeric/BLAS/Vector.hs +201/−121
- test/Test/Float/Numeric/BLAS/Vector/Slice.hs +74/−95
comfort-blas.cabal view
@@ -1,6 +1,6 @@ Cabal-Version: 2.2 Name: comfort-blas-Version: 0.0.0.1+Version: 0.0.1 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.0.1+ Tag: 0.0.1 Type: darcs Location: https://hub.darcs.net/thielema/comfort-blas/ @@ -31,8 +31,9 @@ netlib-ffi >=0.1.1 && <0.2, comfort-array >=0.5.2 && <0.6, guarded-allocation >=0.0 && <0.1,- containers >=0.4 && <0.7,- deepseq >=1.3 && <1.5,+ containers >=0.4 && <0.8,+ semigroups >=0.19 && <0.21,+ deepseq >=1.3 && <1.6, transformers >=0.4 && <0.7, utility-ht >=0.0.13 && <0.1, base >=4.5 && <5@@ -56,7 +57,7 @@ Build-Depends: comfort-blas, netlib-ffi,- comfort-array,+ comfort-array >=0.5.3, doctest-exitcode-stdio >=0.0 && <0.1, doctest-lib >=0.1 && <0.2, QuickCheck >=2.5 && <3,
src/Numeric/BLAS/Vector.hs view
@@ -11,6 +11,8 @@ CheckedArray.take, CheckedArray.drop, CheckedArray.takeLeft, CheckedArray.takeRight, swap,+ reverse,+ cyclicReverse, CheckedArray.singleton, constant, zero,@@ -65,7 +67,7 @@ import Foreign.Marshal.Array (advancePtr) import Foreign.ForeignPtr (withForeignPtr, castForeignPtr) import Foreign.Ptr (Ptr)-import Foreign.Storable (Storable, peek, peekElemOff, pokeElemOff)+import Foreign.Storable (Storable, peek, peekElemOff, poke, pokeElemOff) import Foreign.C.Types (CInt) import System.IO.Unsafe (unsafePerformIO)@@ -73,8 +75,8 @@ import Control.Monad.Trans.Cont (ContT(ContT), evalContT) import Control.Monad.IO.Class (liftIO) import Control.Monad.ST (runST)-import Control.Monad (fmap, return, (=<<))-import Control.Applicative (liftA3, (<$>))+import Control.Monad (when, fmap, return, (=<<))+import Control.Applicative (liftA3, (<$>), (*>)) import qualified Data.Array.Comfort.Storable.Mutable.Unchecked as UMutArray import qualified Data.Array.Comfort.Storable.Mutable as MutArray@@ -89,15 +91,16 @@ import Data.Maybe (Maybe(Nothing,Just), maybe) import Data.Tuple.HT (mapFst, uncurry3) import Data.Tuple (fst, snd)-import Data.Ord ((>=))+import Data.Ord ((>=), (>)) import Data.Eq (Eq, (==)) -import Prelude (Int, fromIntegral, (-), Char, error, IO)+import Prelude (Int, Integral, fromIntegral, (-), Char, error, IO) {- $setup >>> import Test.NumberModule.Type (Number_) >>> import Test.Generator (genNumber)+>>> import Test.Slice (shapeInt) >>> import Test.Utility (approx) >>> import qualified Numeric.BLAS.Vector as Vector >>> import qualified Numeric.Netlib.Class as Class@@ -108,6 +111,8 @@ >>> import Numeric.BLAS.Scalar (RealOf, absolute, minusOne) >>> import Data.Array.Comfort.Storable (Array, (!)) >>> import Data.Complex (Complex((:+)))+>>> import Data.Monoid ((<>))+>>> import Data.Tuple.HT (mapPair) >>> import Control.Applicative (liftA2) >>> import Control.Monad (replicateM) >>>@@ -124,45 +129,67 @@ >>> maxDim :: Int >>> maxDim = 100 >>>->>> genVector :: (Class.Floating a) => Integer -> Int -> QC.Gen (Vector a)->>> genVector maxE dim =->>> fmap (Vector.fromList (Shape.ZeroBased dim)) $->>> replicateM dim $ genNumber maxE+>>> genVector ::+>>> (Shape.C sh, Class.Floating a) =>+>>> sh -> QC.Gen a -> QC.Gen (Vector.Vector sh a)+>>> genVector shape genElem =+>>> fmap (Vector.fromList shape) $+>>> replicateM (Shape.size shape) genElem >>>+>>> real_ :: QC.Gen Real_+>>> real_ = genNumber maxElem+>>>+>>> complex_ :: QC.Gen Complex_+>>> complex_ = genNumber maxElem+>>>+>>> number_ :: QC.Gen Number_+>>> number_ = genNumber maxElem+>>> >>> isNonEmpty :: Shape.C sh => Array sh a -> Bool >>> isNonEmpty xs = Shape.size (Array.shape xs) > 0 >>>->>> newtype ArbRealVector = ArbRealVector (Vector Real_)->>> deriving (Show)+>>> forVector ::+>>> (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>+>>> QC.Gen a -> (Vector a -> prop) -> QC.Property+>>> forVector genElem =+>>> QC.forAllShrink+>>> (flip genVector genElem . shapeInt =<< QC.choose (0,maxDim))+>>> (map Vector.autoFromList . QC.shrink . Vector.toList) >>>->>> instance QC.Arbitrary ArbRealVector where->>> arbitrary = do->>> dim <- QC.choose (0,maxDim)->>> fmap ArbRealVector $ genVector maxElem dim->>> shrink (ArbRealVector xs) =->>> map (ArbRealVector . Vector.autoFromList) .->>> QC.shrink . Vector.toList $ xs+>>> forVector2 ::+>>> (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>+>>> QC.Gen a -> (Vector a -> Vector a -> prop) -> QC.Property+>>> forVector2 genElem prop =+>>> QC.forAllShrink+>>> (do shape <- fmap shapeInt $ QC.choose (0,maxDim)+>>> liftA2 (,) (genVector shape genElem) (genVector shape genElem))+>>> (map (mapPair (Vector.autoFromList, Vector.autoFromList) . unzip) .+>>> QC.shrink .+>>> uncurry zip . mapPair (Vector.toList, Vector.toList))+>>> (uncurry prop) >>>->>> newtype ArbVector = ArbVector (Vector Number_)->>> deriving (Show)+>>> type CyclicVector = Vector.Vector (Shape.Cyclic Int) >>>->>> instance QC.Arbitrary ArbVector where->>> arbitrary = do->>> dim <- QC.choose (0,maxDim)->>> fmap ArbVector $ genVector maxElem dim->>> shrink (ArbVector xs) =->>> map (ArbVector . Vector.autoFromList) .->>> QC.shrink . Vector.toList $ xs+>>> genCyclicVector ::+>>> (Class.Floating a) =>+>>> Integer -> Int -> QC.Gen (CyclicVector a)+>>> genCyclicVector maxE dim =+>>> fmap (Vector.fromList (Shape.Cyclic dim)) $+>>> replicateM dim $ genNumber maxE >>>->>> data ArbVector2 =->>> ArbVector2 (Vector Number_) (Vector Number_)->>> deriving (Show)+>>> cyclicVectorFromListGen :: (Class.Floating a) => [a] -> CyclicVector a+>>> cyclicVectorFromListGen xs = Vector.fromList (Shape.Cyclic $ length xs) xs >>>->>> instance QC.Arbitrary ArbVector2 where->>> arbitrary = do->>> dim <- QC.choose (0,maxDim)->>> liftA2 ArbVector2->>> (genVector maxElem dim) (genVector maxElem dim)+>>> cyclicVectorFromList :: [Number_] -> CyclicVector Number_+>>> cyclicVectorFromList = cyclicVectorFromListGen+>>>+>>> forCyclicVector ::+>>> (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>+>>> QC.Gen a -> (CyclicVector a -> prop) -> QC.Property+>>> forCyclicVector genElem =+>>> QC.forAllShrink+>>> (flip genVector genElem . Shape.Cyclic =<< QC.choose (0,maxDim))+>>> (map cyclicVectorFromListGen . QC.shrink . Vector.toList) -} @@ -209,7 +236,7 @@ {- |-prop> \(ArbVector xs) (ArbVector ys) (ArbVector zs) -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs))+prop> forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs)) -} (+++) :: (Shape.C shx, Shape.C shy, Storable a) =>@@ -218,6 +245,49 @@ {- |+prop> Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_)+prop> Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_)+prop> Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_)++prop> forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs)+prop> forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs)+prop> forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs+-}+reverse ::+ (Integral n, Class.Floating a) =>+ Vector (Shape.ZeroBased n) a -> Vector (Shape.ZeroBased n) a+reverse (Array sh x) =+ Array.unsafeCreateWithSize sh $ \n yPtr -> evalContT $ do+ nPtr <- Call.cint n+ xPtr <- ContT $ withForeignPtr x+ incxPtr <- Call.cint 1+ incyPtr <- Call.cint (-1)+ liftIO $ Blas.copy nPtr xPtr incxPtr yPtr incyPtr+++{- |+prop> cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList [])+prop> cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1])+prop> cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3])+prop> cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6])++prop> forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs)+-}+cyclicReverse ::+ (Integral n, Class.Floating a) =>+ Vector (Shape.Cyclic n) a -> Vector (Shape.Cyclic n) a+cyclicReverse (Array sh x) =+ Array.unsafeCreateWithSize sh $ \n yPtr -> evalContT $ when (n>0) $ do+ nPtr <- Call.cint (n-1)+ xPtr <- ContT $ withForeignPtr x+ incxPtr <- Call.cint 1+ incyPtr <- Call.cint (-1)+ liftIO $ do+ poke yPtr =<< peek xPtr+ Blas.copy nPtr (advancePtr xPtr 1) incxPtr (advancePtr yPtr 1) incyPtr+++{- | prop> 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_) -} swap ::@@ -253,7 +323,7 @@ (Dot $ dotComplex 'T') {- |-prop> \(ArbVector2 xs ys) -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys+prop> forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys -} inner :: (Shape.C sh, Eq sh, Class.Floating a) =>@@ -306,7 +376,7 @@ liftIO $ peek zPtr {- |-prop> \(ArbVector xs) -> Vector.sum xs == List.sum (Vector.toList xs)+prop> forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs) -} sum :: (Shape.C sh, Class.Floating a) => Vector sh a -> a sum (Array sh x) = unsafePerformIO $@@ -366,7 +436,7 @@ {- |-prop> \(ArbVector xs) -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs))+prop> forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)) -} normInf :: (Shape.C sh, Class.Floating a) => Vector sh a -> RealOf a normInf arr = unsafePerformIO $@@ -393,9 +463,9 @@ >>> Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_] (3,6.0 :+ 0.0) -prop> \(ArbVector xs) -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm-prop> \(ArbVector xs) -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs-prop> \(ArbVector xs, ArbVector 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+prop> forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm+prop> forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs+prop> 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 -} argAbsMaximum :: (Shape.InvIndexed sh, Class.Floating a) =>@@ -442,7 +512,7 @@ >>> Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_] (1,3.0 :+ 4.0) -prop> \(ArbRealVector xs) -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs+prop> forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs -} argAbs1Maximum :: (Shape.InvIndexed sh, Class.Floating a) =>@@ -475,7 +545,7 @@ {- |-prop> QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector 3 dim) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_)))+prop> 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_))) -} product :: (Shape.C sh, Class.Floating a) => Vector sh a -> a product (Array sh x) = unsafePerformIO $@@ -485,9 +555,9 @@ {- | For restrictions see 'limits'. -prop> \(ArbRealVector xs) -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs)-prop> \(ArbRealVector xs) -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs)-prop> \(ArbRealVector xs) -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs)+prop> forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs)+prop> forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs)+prop> forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs) -} minimum, maximum :: (Shape.C sh, Class.Real a) => Vector sh a -> a minimum = fst . limits@@ -503,7 +573,7 @@ argMaximum = snd . argLimits {- |-prop> \(ArbRealVector xs) -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs+prop> forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs In contrast to 'Array.limits' this implementation is based on fast BLAS functions.@@ -533,8 +603,8 @@ {- |-prop> \(ArbVector xs) -> Vector.negate xs == Vector.scale minusOne xs-prop> \(ArbVector xs) -> Vector.scale 2 xs == xs |+| xs+prop> forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs+prop> forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs -} scale, _scale, (.*|) :: (Shape.C sh, Class.Floating a) =>@@ -603,8 +673,8 @@ {- |-prop> \(ArbVector2 xs ys) -> xs |+| ys == ys |+| xs-prop> \(ArbVector2 xs ys) -> xs == xs |-| ys |+| ys+prop> forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs+prop> forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys -} add, sub, (|+|), (|-|) :: (Shape.C sh, Eq sh, Class.Floating a) =>@@ -634,7 +704,7 @@ {- |-prop> \(ArbVector xs) -> xs == Vector.negate (Vector.negate xs)+prop> forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs) -} negate :: (Shape.C sh, Class.Floating a) => Vector sh a -> Vector sh a negate =@@ -647,7 +717,7 @@ {- |-prop> QC.forAll (genNumber maxElem) $ \d (ArbVector xs) -> xs == Vector.raise (-d) (Vector.raise d xs)+prop> QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs) -} raise :: (Shape.C sh, Class.Floating a) => a -> Vector sh a -> Vector sh a raise c (Array shX x) =@@ -664,7 +734,7 @@ {- |-prop> \(ArbVector2 xs ys) -> Vector.mul xs ys == Vector.mul ys xs+prop> forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs -} mul :: (Shape.C sh, Eq sh, Class.Floating a) =>@@ -672,7 +742,7 @@ mul = mulConjugation NonConjugated {- |-prop> \(ArbVector2 xs ys) -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys+prop> forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys -} mulConj :: (Shape.C sh, Eq sh, Class.Floating a) =>
src/Numeric/BLAS/Vector/Slice.hs view
@@ -88,6 +88,8 @@ >>> :set -XTypeOperators >>> :set -XGADTs >>> import qualified Test.Slice as TestSlice+>>> import Test.NumberModule.Numeric.BLAS.Vector+>>> (maxElem, maxDim, genVector, number_, real_, complex_) >>> import Test.NumberModule.Type (Number_) >>> import Test.Generator (genNumber) >>> import Test.Utility (approx, approxReal)@@ -106,7 +108,6 @@ >>> import Data.Array.Comfort.Shape ((::+)((::+))) >>> import Data.Tuple.HT (mapPair) >>> import Data.Complex (Complex)->>> import Control.Monad (replicateM) >>> import Control.Applicative (liftA2) >>> >>> import qualified Test.QuickCheck as QC@@ -115,12 +116,6 @@ >>> type Real_ = RealOf Number_ >>> type Complex_ = Complex Real_ >>>->>> maxElem :: Integer->>> maxElem = 10->>>->>> maxDim :: Int->>> maxDim = 100->>> >>> maxDim1 :: Int >>> maxDim1 = 10 >>>@@ -142,24 +137,8 @@ >>> genShape :: QC.Gen Shape >>> genShape = genShapeDim =<< QC.choose (0,maxDim1) >>>->>> genVector ::->>> (Shape.C sh, Class.Floating a) =>->>> sh -> QC.Gen a -> QC.Gen (Vector.Vector sh a)->>> genVector shape genElem =->>> fmap (Vector.fromList shape) $->>> replicateM (Shape.size shape) genElem->>> >>> forAll_ :: (Show a) => QC.Gen a -> (a -> QC.Property) -> QC.Property >>> forAll_ = QC.forAll->>>->>> real_ :: QC.Gen Real_->>> real_ = genNumber maxElem->>>->>> complex_ :: QC.Gen Complex_->>> complex_ = genNumber maxElem->>>->>> number_ :: QC.Gen Number_->>> number_ = genNumber maxElem >>> >>> isNonEmpty :: Shape.C sh => VectorSlice.T shA sh a -> Bool >>> isNonEmpty xs = Shape.size (VectorSlice.shape xs) > 0
test/Test/ComplexDouble/Numeric/BLAS/Vector.hs view
@@ -1,14 +1,15 @@ -- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Vector.hs-{-# LINE 98 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 100 "src/Numeric/BLAS/Vector.hs" #-} module Test.ComplexDouble.Numeric.BLAS.Vector where import Test.DocTest.Base import qualified Test.DocTest.Driver as DocTest -{-# LINE 99 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 101 "src/Numeric/BLAS/Vector.hs" #-} import Test.ComplexDouble.Type (Number_) import Test.Generator (genNumber)+import Test.Slice (shapeInt) import Test.Utility (approx) import qualified Numeric.BLAS.Vector as Vector import qualified Numeric.Netlib.Class as Class@@ -19,6 +20,8 @@ import Numeric.BLAS.Scalar (RealOf, absolute, minusOne) import Data.Array.Comfort.Storable (Array, (!)) import Data.Complex (Complex((:+)))+import Data.Monoid ((<>))+import Data.Tuple.HT (mapPair) import Control.Applicative (liftA2) import Control.Monad (replicateM) @@ -35,167 +38,244 @@ maxDim :: Int maxDim = 100 -genVector :: (Class.Floating a) => Integer -> Int -> QC.Gen (Vector a)-genVector maxE dim =- fmap (Vector.fromList (Shape.ZeroBased dim)) $- replicateM dim $ genNumber maxE+genVector ::+ (Shape.C sh, Class.Floating a) =>+ sh -> QC.Gen a -> QC.Gen (Vector.Vector sh a)+genVector shape genElem =+ fmap (Vector.fromList shape) $+ replicateM (Shape.size shape) genElem +real_ :: QC.Gen Real_+real_ = genNumber maxElem++complex_ :: QC.Gen Complex_+complex_ = genNumber maxElem++number_ :: QC.Gen Number_+number_ = genNumber maxElem+ isNonEmpty :: Shape.C sh => Array sh a -> Bool isNonEmpty xs = Shape.size (Array.shape xs) > 0 -newtype ArbRealVector = ArbRealVector (Vector Real_)- deriving (Show)+forVector ::+ (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>+ QC.Gen a -> (Vector a -> prop) -> QC.Property+forVector genElem =+ QC.forAllShrink+ (flip genVector genElem . shapeInt =<< QC.choose (0,maxDim))+ (map Vector.autoFromList . QC.shrink . Vector.toList) -instance QC.Arbitrary ArbRealVector where- arbitrary = do- dim <- QC.choose (0,maxDim)- fmap ArbRealVector $ genVector maxElem dim- shrink (ArbRealVector xs) =- map (ArbRealVector . Vector.autoFromList) .- QC.shrink . Vector.toList $ xs+forVector2 ::+ (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>+ QC.Gen a -> (Vector a -> Vector a -> prop) -> QC.Property+forVector2 genElem prop =+ QC.forAllShrink+ (do shape <- fmap shapeInt $ QC.choose (0,maxDim)+ liftA2 (,) (genVector shape genElem) (genVector shape genElem))+ (map (mapPair (Vector.autoFromList, Vector.autoFromList) . unzip) .+ QC.shrink .+ uncurry zip . mapPair (Vector.toList, Vector.toList))+ (uncurry prop) -newtype ArbVector = ArbVector (Vector Number_)- deriving (Show)+type CyclicVector = Vector.Vector (Shape.Cyclic Int) -instance QC.Arbitrary ArbVector where- arbitrary = do- dim <- QC.choose (0,maxDim)- fmap ArbVector $ genVector maxElem dim- shrink (ArbVector xs) =- map (ArbVector . Vector.autoFromList) .- QC.shrink . Vector.toList $ xs+genCyclicVector ::+ (Class.Floating a) =>+ Integer -> Int -> QC.Gen (CyclicVector a)+genCyclicVector maxE dim =+ fmap (Vector.fromList (Shape.Cyclic dim)) $+ replicateM dim $ genNumber maxE -data ArbVector2 =- ArbVector2 (Vector Number_) (Vector Number_)- deriving (Show)+cyclicVectorFromListGen :: (Class.Floating a) => [a] -> CyclicVector a+cyclicVectorFromListGen xs = Vector.fromList (Shape.Cyclic $ length xs) xs -instance QC.Arbitrary ArbVector2 where- arbitrary = do- dim <- QC.choose (0,maxDim)- liftA2 ArbVector2- (genVector maxElem dim) (genVector maxElem dim)+cyclicVectorFromList :: [Number_] -> CyclicVector Number_+cyclicVectorFromList = cyclicVectorFromListGen +forCyclicVector ::+ (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>+ QC.Gen a -> (CyclicVector a -> prop) -> QC.Property+forCyclicVector genElem =+ QC.forAllShrink+ (flip genVector genElem . Shape.Cyclic =<< QC.choose (0,maxDim))+ (map cyclicVectorFromListGen . QC.shrink . Vector.toList)+ test :: DocTest.T () test = do- DocTest.printPrefix "Numeric.BLAS.Vector:212: "-{-# LINE 212 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:239: "+{-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 212 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) (ArbVector ys) (ArbVector zs) -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs)))- DocTest.printPrefix "Numeric.BLAS.Vector:221: "-{-# LINE 221 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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)))+ DocTest.printPrefix "Numeric.BLAS.Vector:248: "+{-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 221 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}+ (Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_))+ DocTest.printPrefix "Numeric.BLAS.Vector:249: "+{-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs))+ DocTest.printPrefix "Numeric.BLAS.Vector:254: "+{-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}+ 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)+ DocTest.printPrefix "Numeric.BLAS.Vector:269: "+{-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}+ (cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList []))+ DocTest.printPrefix "Numeric.BLAS.Vector:270: "+{-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}+ (cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1]))+ DocTest.printPrefix "Numeric.BLAS.Vector:271: "+{-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}+ (forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs))+ DocTest.printPrefix "Numeric.BLAS.Vector:291: "+{-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}+ 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_))- DocTest.printPrefix "Numeric.BLAS.Vector:256: "-{-# LINE 256 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:326: "+{-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 256 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys)- DocTest.printPrefix "Numeric.BLAS.Vector:309: "-{-# LINE 309 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 309 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.sum xs == List.sum (Vector.toList xs))- DocTest.printPrefix "Numeric.BLAS.Vector:369: "-{-# LINE 369 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 369 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))- DocTest.printPrefix "Numeric.BLAS.Vector:396: "-{-# LINE 396 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))+ DocTest.printPrefix "Numeric.BLAS.Vector:466: "+{-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 396 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm)- DocTest.printPrefix "Numeric.BLAS.Vector:397: "-{-# LINE 397 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 397 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector 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:398: "-{-# LINE 398 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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)+ DocTest.printPrefix "Numeric.BLAS.Vector:468: "+{-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 398 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs, ArbVector 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:393: "-{-# LINE 393 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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 393 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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:445: "-{-# LINE 445 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:515: "+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 445 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)- DocTest.printPrefix "Numeric.BLAS.Vector:442: "-{-# LINE 442 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)+ DocTest.printPrefix "Numeric.BLAS.Vector:512: "+{-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-} DocTest.example-{-# LINE 442 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-} (Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]) [ExpectedLine [LineChunk "(1,3.0 :+ 4.0)"]]- DocTest.printPrefix "Numeric.BLAS.Vector:478: "-{-# LINE 478 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property-{-# LINE 478 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector 3 dim) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_))))- DocTest.printPrefix "Numeric.BLAS.Vector:488: "-{-# LINE 488 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property-{-# LINE 488 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs))- DocTest.printPrefix "Numeric.BLAS.Vector:489: "-{-# LINE 489 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:548: "+{-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 489 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs))- DocTest.printPrefix "Numeric.BLAS.Vector:490: "-{-# LINE 490 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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_))))+ DocTest.printPrefix "Numeric.BLAS.Vector:558: "+{-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 490 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs))- DocTest.printPrefix "Numeric.BLAS.Vector:506: "-{-# LINE 506 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 506 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs)- DocTest.printPrefix "Numeric.BLAS.Vector:536: "-{-# LINE 536 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 536 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.negate xs == Vector.scale minusOne xs)- DocTest.printPrefix "Numeric.BLAS.Vector:537: "-{-# LINE 537 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 537 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.scale 2 xs == xs |+| xs)+{-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}+ (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 {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> xs |+| ys == ys |+| 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 {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> xs == xs |-| ys |+| ys)- DocTest.printPrefix "Numeric.BLAS.Vector:637: "-{-# LINE 637 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs)+ DocTest.printPrefix "Numeric.BLAS.Vector:676: "+{-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 637 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> xs == Vector.negate (Vector.negate xs))- DocTest.printPrefix "Numeric.BLAS.Vector:650: "-{-# LINE 650 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs)+ DocTest.printPrefix "Numeric.BLAS.Vector:677: "+{-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 650 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (genNumber maxElem) $ \d (ArbVector xs) -> xs == Vector.raise (-d) (Vector.raise d xs))- DocTest.printPrefix "Numeric.BLAS.Vector:667: "-{-# LINE 667 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys)+ DocTest.printPrefix "Numeric.BLAS.Vector:707: "+{-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 667 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> Vector.mul xs ys == Vector.mul ys xs)- DocTest.printPrefix "Numeric.BLAS.Vector:675: "-{-# LINE 675 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs))+ DocTest.printPrefix "Numeric.BLAS.Vector:720: "+{-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 675 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)+{-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)
test/Test/ComplexDouble/Numeric/BLAS/Vector/Slice.hs view
@@ -9,6 +9,8 @@ {-# LINE 90 "src/Numeric/BLAS/Vector/Slice.hs" #-} import qualified Test.Slice as TestSlice+import Test.ComplexDouble.Numeric.BLAS.Vector+ (maxElem, maxDim, genVector, number_, real_, complex_) import Test.ComplexDouble.Type (Number_) import Test.Generator (genNumber) import Test.Utility (approx, approxReal)@@ -27,7 +29,6 @@ import Data.Array.Comfort.Shape ((::+)((::+))) import Data.Tuple.HT (mapPair) import Data.Complex (Complex)-import Control.Monad (replicateM) import Control.Applicative (liftA2) import qualified Test.QuickCheck as QC@@ -36,12 +37,6 @@ type Real_ = RealOf Number_ type Complex_ = Complex Real_ -maxElem :: Integer-maxElem = 10--maxDim :: Int-maxDim = 100- maxDim1 :: Int maxDim1 = 10 @@ -63,25 +58,9 @@ genShape :: QC.Gen Shape genShape = genShapeDim =<< QC.choose (0,maxDim1) -genVector ::- (Shape.C sh, Class.Floating a) =>- sh -> QC.Gen a -> QC.Gen (Vector.Vector sh a)-genVector shape genElem =- fmap (Vector.fromList shape) $- replicateM (Shape.size shape) genElem- forAll_ :: (Show a) => QC.Gen a -> (a -> QC.Property) -> QC.Property forAll_ = QC.forAll -real_ :: QC.Gen Real_-real_ = genNumber maxElem--complex_ :: QC.Gen Complex_-complex_ = genNumber maxElem--number_ :: QC.Gen Number_-number_ = genNumber maxElem- isNonEmpty :: Shape.C sh => VectorSlice.T shA sh a -> Bool isNonEmpty xs = Shape.size (VectorSlice.shape xs) > 0 @@ -150,123 +129,123 @@ test :: DocTest.T () test = do- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:301: "-{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:280: "+{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:303: "-{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:282: "+{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:335: "-{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:314: "+{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:336: "-{-# LINE 336 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:315: "+{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 336 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:419: "-{-# LINE 419 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:398: "+{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 419 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-} (forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:492: "-{-# LINE 492 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:471: "+{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 492 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:503: "-{-# LINE 503 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:482: "+{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 503 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:518: "-{-# LINE 518 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:497: "+{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 518 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:519: "-{-# LINE 519 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:498: "+{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 519 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:520: "-{-# LINE 520 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:499: "+{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 520 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:567: "-{-# LINE 567 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:546: "+{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 567 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:592: "-{-# LINE 592 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:571: "+{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 592 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:603: "-{-# LINE 603 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:582: "+{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 603 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:604: "-{-# LINE 604 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:583: "+{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 604 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:620: "-{-# LINE 620 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:599: "+{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 620 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:650: "-{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:629: "+{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-} (forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:651: "-{-# LINE 651 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:630: "+{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 651 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:710: "-{-# LINE 710 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:689: "+{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 710 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:711: "-{-# LINE 711 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:690: "+{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 711 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:736: "-{-# LINE 736 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:715: "+{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 736 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:749: "-{-# LINE 749 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:728: "+{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 749 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:766: "-{-# LINE 766 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:745: "+{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 766 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:774: "-{-# LINE 774 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:753: "+{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 774 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:898: "-{-# LINE 898 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:877: "+{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 898 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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)
test/Test/ComplexFloat/Numeric/BLAS/Vector.hs view
@@ -1,14 +1,15 @@ -- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Vector.hs-{-# LINE 98 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 100 "src/Numeric/BLAS/Vector.hs" #-} module Test.ComplexFloat.Numeric.BLAS.Vector where import Test.DocTest.Base import qualified Test.DocTest.Driver as DocTest -{-# LINE 99 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 101 "src/Numeric/BLAS/Vector.hs" #-} import Test.ComplexFloat.Type (Number_) import Test.Generator (genNumber)+import Test.Slice (shapeInt) import Test.Utility (approx) import qualified Numeric.BLAS.Vector as Vector import qualified Numeric.Netlib.Class as Class@@ -19,6 +20,8 @@ import Numeric.BLAS.Scalar (RealOf, absolute, minusOne) import Data.Array.Comfort.Storable (Array, (!)) import Data.Complex (Complex((:+)))+import Data.Monoid ((<>))+import Data.Tuple.HT (mapPair) import Control.Applicative (liftA2) import Control.Monad (replicateM) @@ -35,167 +38,244 @@ maxDim :: Int maxDim = 100 -genVector :: (Class.Floating a) => Integer -> Int -> QC.Gen (Vector a)-genVector maxE dim =- fmap (Vector.fromList (Shape.ZeroBased dim)) $- replicateM dim $ genNumber maxE+genVector ::+ (Shape.C sh, Class.Floating a) =>+ sh -> QC.Gen a -> QC.Gen (Vector.Vector sh a)+genVector shape genElem =+ fmap (Vector.fromList shape) $+ replicateM (Shape.size shape) genElem +real_ :: QC.Gen Real_+real_ = genNumber maxElem++complex_ :: QC.Gen Complex_+complex_ = genNumber maxElem++number_ :: QC.Gen Number_+number_ = genNumber maxElem+ isNonEmpty :: Shape.C sh => Array sh a -> Bool isNonEmpty xs = Shape.size (Array.shape xs) > 0 -newtype ArbRealVector = ArbRealVector (Vector Real_)- deriving (Show)+forVector ::+ (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>+ QC.Gen a -> (Vector a -> prop) -> QC.Property+forVector genElem =+ QC.forAllShrink+ (flip genVector genElem . shapeInt =<< QC.choose (0,maxDim))+ (map Vector.autoFromList . QC.shrink . Vector.toList) -instance QC.Arbitrary ArbRealVector where- arbitrary = do- dim <- QC.choose (0,maxDim)- fmap ArbRealVector $ genVector maxElem dim- shrink (ArbRealVector xs) =- map (ArbRealVector . Vector.autoFromList) .- QC.shrink . Vector.toList $ xs+forVector2 ::+ (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>+ QC.Gen a -> (Vector a -> Vector a -> prop) -> QC.Property+forVector2 genElem prop =+ QC.forAllShrink+ (do shape <- fmap shapeInt $ QC.choose (0,maxDim)+ liftA2 (,) (genVector shape genElem) (genVector shape genElem))+ (map (mapPair (Vector.autoFromList, Vector.autoFromList) . unzip) .+ QC.shrink .+ uncurry zip . mapPair (Vector.toList, Vector.toList))+ (uncurry prop) -newtype ArbVector = ArbVector (Vector Number_)- deriving (Show)+type CyclicVector = Vector.Vector (Shape.Cyclic Int) -instance QC.Arbitrary ArbVector where- arbitrary = do- dim <- QC.choose (0,maxDim)- fmap ArbVector $ genVector maxElem dim- shrink (ArbVector xs) =- map (ArbVector . Vector.autoFromList) .- QC.shrink . Vector.toList $ xs+genCyclicVector ::+ (Class.Floating a) =>+ Integer -> Int -> QC.Gen (CyclicVector a)+genCyclicVector maxE dim =+ fmap (Vector.fromList (Shape.Cyclic dim)) $+ replicateM dim $ genNumber maxE -data ArbVector2 =- ArbVector2 (Vector Number_) (Vector Number_)- deriving (Show)+cyclicVectorFromListGen :: (Class.Floating a) => [a] -> CyclicVector a+cyclicVectorFromListGen xs = Vector.fromList (Shape.Cyclic $ length xs) xs -instance QC.Arbitrary ArbVector2 where- arbitrary = do- dim <- QC.choose (0,maxDim)- liftA2 ArbVector2- (genVector maxElem dim) (genVector maxElem dim)+cyclicVectorFromList :: [Number_] -> CyclicVector Number_+cyclicVectorFromList = cyclicVectorFromListGen +forCyclicVector ::+ (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>+ QC.Gen a -> (CyclicVector a -> prop) -> QC.Property+forCyclicVector genElem =+ QC.forAllShrink+ (flip genVector genElem . Shape.Cyclic =<< QC.choose (0,maxDim))+ (map cyclicVectorFromListGen . QC.shrink . Vector.toList)+ test :: DocTest.T () test = do- DocTest.printPrefix "Numeric.BLAS.Vector:212: "-{-# LINE 212 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:239: "+{-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 212 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) (ArbVector ys) (ArbVector zs) -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs)))- DocTest.printPrefix "Numeric.BLAS.Vector:221: "-{-# LINE 221 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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)))+ DocTest.printPrefix "Numeric.BLAS.Vector:248: "+{-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 221 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}+ (Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_))+ DocTest.printPrefix "Numeric.BLAS.Vector:249: "+{-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs))+ DocTest.printPrefix "Numeric.BLAS.Vector:254: "+{-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}+ 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)+ DocTest.printPrefix "Numeric.BLAS.Vector:269: "+{-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}+ (cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList []))+ DocTest.printPrefix "Numeric.BLAS.Vector:270: "+{-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}+ (cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1]))+ DocTest.printPrefix "Numeric.BLAS.Vector:271: "+{-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}+ (forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs))+ DocTest.printPrefix "Numeric.BLAS.Vector:291: "+{-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}+ 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_))- DocTest.printPrefix "Numeric.BLAS.Vector:256: "-{-# LINE 256 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:326: "+{-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 256 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys)- DocTest.printPrefix "Numeric.BLAS.Vector:309: "-{-# LINE 309 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 309 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.sum xs == List.sum (Vector.toList xs))- DocTest.printPrefix "Numeric.BLAS.Vector:369: "-{-# LINE 369 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 369 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))- DocTest.printPrefix "Numeric.BLAS.Vector:396: "-{-# LINE 396 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))+ DocTest.printPrefix "Numeric.BLAS.Vector:466: "+{-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 396 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm)- DocTest.printPrefix "Numeric.BLAS.Vector:397: "-{-# LINE 397 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 397 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector 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:398: "-{-# LINE 398 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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)+ DocTest.printPrefix "Numeric.BLAS.Vector:468: "+{-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 398 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs, ArbVector 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:393: "-{-# LINE 393 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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 393 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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:445: "-{-# LINE 445 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:515: "+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 445 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)- DocTest.printPrefix "Numeric.BLAS.Vector:442: "-{-# LINE 442 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)+ DocTest.printPrefix "Numeric.BLAS.Vector:512: "+{-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-} DocTest.example-{-# LINE 442 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-} (Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]) [ExpectedLine [LineChunk "(1,3.0 :+ 4.0)"]]- DocTest.printPrefix "Numeric.BLAS.Vector:478: "-{-# LINE 478 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property-{-# LINE 478 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector 3 dim) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_))))- DocTest.printPrefix "Numeric.BLAS.Vector:488: "-{-# LINE 488 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property-{-# LINE 488 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs))- DocTest.printPrefix "Numeric.BLAS.Vector:489: "-{-# LINE 489 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:548: "+{-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 489 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs))- DocTest.printPrefix "Numeric.BLAS.Vector:490: "-{-# LINE 490 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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_))))+ DocTest.printPrefix "Numeric.BLAS.Vector:558: "+{-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 490 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs))- DocTest.printPrefix "Numeric.BLAS.Vector:506: "-{-# LINE 506 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 506 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs)- DocTest.printPrefix "Numeric.BLAS.Vector:536: "-{-# LINE 536 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 536 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.negate xs == Vector.scale minusOne xs)- DocTest.printPrefix "Numeric.BLAS.Vector:537: "-{-# LINE 537 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 537 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.scale 2 xs == xs |+| xs)+{-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}+ (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 {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> xs |+| ys == ys |+| 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 {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> xs == xs |-| ys |+| ys)- DocTest.printPrefix "Numeric.BLAS.Vector:637: "-{-# LINE 637 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs)+ DocTest.printPrefix "Numeric.BLAS.Vector:676: "+{-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 637 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> xs == Vector.negate (Vector.negate xs))- DocTest.printPrefix "Numeric.BLAS.Vector:650: "-{-# LINE 650 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs)+ DocTest.printPrefix "Numeric.BLAS.Vector:677: "+{-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 650 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (genNumber maxElem) $ \d (ArbVector xs) -> xs == Vector.raise (-d) (Vector.raise d xs))- DocTest.printPrefix "Numeric.BLAS.Vector:667: "-{-# LINE 667 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys)+ DocTest.printPrefix "Numeric.BLAS.Vector:707: "+{-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 667 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> Vector.mul xs ys == Vector.mul ys xs)- DocTest.printPrefix "Numeric.BLAS.Vector:675: "-{-# LINE 675 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs))+ DocTest.printPrefix "Numeric.BLAS.Vector:720: "+{-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 675 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)+{-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)
test/Test/ComplexFloat/Numeric/BLAS/Vector/Slice.hs view
@@ -9,6 +9,8 @@ {-# LINE 90 "src/Numeric/BLAS/Vector/Slice.hs" #-} import qualified Test.Slice as TestSlice+import Test.ComplexFloat.Numeric.BLAS.Vector+ (maxElem, maxDim, genVector, number_, real_, complex_) import Test.ComplexFloat.Type (Number_) import Test.Generator (genNumber) import Test.Utility (approx, approxReal)@@ -27,7 +29,6 @@ import Data.Array.Comfort.Shape ((::+)((::+))) import Data.Tuple.HT (mapPair) import Data.Complex (Complex)-import Control.Monad (replicateM) import Control.Applicative (liftA2) import qualified Test.QuickCheck as QC@@ -36,12 +37,6 @@ type Real_ = RealOf Number_ type Complex_ = Complex Real_ -maxElem :: Integer-maxElem = 10--maxDim :: Int-maxDim = 100- maxDim1 :: Int maxDim1 = 10 @@ -63,25 +58,9 @@ genShape :: QC.Gen Shape genShape = genShapeDim =<< QC.choose (0,maxDim1) -genVector ::- (Shape.C sh, Class.Floating a) =>- sh -> QC.Gen a -> QC.Gen (Vector.Vector sh a)-genVector shape genElem =- fmap (Vector.fromList shape) $- replicateM (Shape.size shape) genElem- forAll_ :: (Show a) => QC.Gen a -> (a -> QC.Property) -> QC.Property forAll_ = QC.forAll -real_ :: QC.Gen Real_-real_ = genNumber maxElem--complex_ :: QC.Gen Complex_-complex_ = genNumber maxElem--number_ :: QC.Gen Number_-number_ = genNumber maxElem- isNonEmpty :: Shape.C sh => VectorSlice.T shA sh a -> Bool isNonEmpty xs = Shape.size (VectorSlice.shape xs) > 0 @@ -150,123 +129,123 @@ test :: DocTest.T () test = do- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:301: "-{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:280: "+{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:303: "-{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:282: "+{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:335: "-{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:314: "+{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:336: "-{-# LINE 336 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:315: "+{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 336 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:419: "-{-# LINE 419 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:398: "+{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 419 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-} (forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:492: "-{-# LINE 492 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:471: "+{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 492 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:503: "-{-# LINE 503 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:482: "+{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 503 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:518: "-{-# LINE 518 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:497: "+{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 518 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:519: "-{-# LINE 519 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:498: "+{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 519 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:520: "-{-# LINE 520 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:499: "+{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 520 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:567: "-{-# LINE 567 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:546: "+{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 567 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:592: "-{-# LINE 592 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:571: "+{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 592 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:603: "-{-# LINE 603 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:582: "+{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 603 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:604: "-{-# LINE 604 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:583: "+{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 604 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:620: "-{-# LINE 620 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:599: "+{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 620 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:650: "-{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:629: "+{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-} (forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:651: "-{-# LINE 651 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:630: "+{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 651 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:710: "-{-# LINE 710 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:689: "+{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 710 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:711: "-{-# LINE 711 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:690: "+{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 711 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:736: "-{-# LINE 736 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:715: "+{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 736 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:749: "-{-# LINE 749 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:728: "+{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 749 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:766: "-{-# LINE 766 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:745: "+{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 766 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:774: "-{-# LINE 774 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:753: "+{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 774 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:898: "-{-# LINE 898 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:877: "+{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 898 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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)
test/Test/Double/Numeric/BLAS/Vector.hs view
@@ -1,14 +1,15 @@ -- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Vector.hs-{-# LINE 98 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 100 "src/Numeric/BLAS/Vector.hs" #-} module Test.Double.Numeric.BLAS.Vector where import Test.DocTest.Base import qualified Test.DocTest.Driver as DocTest -{-# LINE 99 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 101 "src/Numeric/BLAS/Vector.hs" #-} import Test.Double.Type (Number_) import Test.Generator (genNumber)+import Test.Slice (shapeInt) import Test.Utility (approx) import qualified Numeric.BLAS.Vector as Vector import qualified Numeric.Netlib.Class as Class@@ -19,6 +20,8 @@ import Numeric.BLAS.Scalar (RealOf, absolute, minusOne) import Data.Array.Comfort.Storable (Array, (!)) import Data.Complex (Complex((:+)))+import Data.Monoid ((<>))+import Data.Tuple.HT (mapPair) import Control.Applicative (liftA2) import Control.Monad (replicateM) @@ -35,167 +38,244 @@ maxDim :: Int maxDim = 100 -genVector :: (Class.Floating a) => Integer -> Int -> QC.Gen (Vector a)-genVector maxE dim =- fmap (Vector.fromList (Shape.ZeroBased dim)) $- replicateM dim $ genNumber maxE+genVector ::+ (Shape.C sh, Class.Floating a) =>+ sh -> QC.Gen a -> QC.Gen (Vector.Vector sh a)+genVector shape genElem =+ fmap (Vector.fromList shape) $+ replicateM (Shape.size shape) genElem +real_ :: QC.Gen Real_+real_ = genNumber maxElem++complex_ :: QC.Gen Complex_+complex_ = genNumber maxElem++number_ :: QC.Gen Number_+number_ = genNumber maxElem+ isNonEmpty :: Shape.C sh => Array sh a -> Bool isNonEmpty xs = Shape.size (Array.shape xs) > 0 -newtype ArbRealVector = ArbRealVector (Vector Real_)- deriving (Show)+forVector ::+ (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>+ QC.Gen a -> (Vector a -> prop) -> QC.Property+forVector genElem =+ QC.forAllShrink+ (flip genVector genElem . shapeInt =<< QC.choose (0,maxDim))+ (map Vector.autoFromList . QC.shrink . Vector.toList) -instance QC.Arbitrary ArbRealVector where- arbitrary = do- dim <- QC.choose (0,maxDim)- fmap ArbRealVector $ genVector maxElem dim- shrink (ArbRealVector xs) =- map (ArbRealVector . Vector.autoFromList) .- QC.shrink . Vector.toList $ xs+forVector2 ::+ (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>+ QC.Gen a -> (Vector a -> Vector a -> prop) -> QC.Property+forVector2 genElem prop =+ QC.forAllShrink+ (do shape <- fmap shapeInt $ QC.choose (0,maxDim)+ liftA2 (,) (genVector shape genElem) (genVector shape genElem))+ (map (mapPair (Vector.autoFromList, Vector.autoFromList) . unzip) .+ QC.shrink .+ uncurry zip . mapPair (Vector.toList, Vector.toList))+ (uncurry prop) -newtype ArbVector = ArbVector (Vector Number_)- deriving (Show)+type CyclicVector = Vector.Vector (Shape.Cyclic Int) -instance QC.Arbitrary ArbVector where- arbitrary = do- dim <- QC.choose (0,maxDim)- fmap ArbVector $ genVector maxElem dim- shrink (ArbVector xs) =- map (ArbVector . Vector.autoFromList) .- QC.shrink . Vector.toList $ xs+genCyclicVector ::+ (Class.Floating a) =>+ Integer -> Int -> QC.Gen (CyclicVector a)+genCyclicVector maxE dim =+ fmap (Vector.fromList (Shape.Cyclic dim)) $+ replicateM dim $ genNumber maxE -data ArbVector2 =- ArbVector2 (Vector Number_) (Vector Number_)- deriving (Show)+cyclicVectorFromListGen :: (Class.Floating a) => [a] -> CyclicVector a+cyclicVectorFromListGen xs = Vector.fromList (Shape.Cyclic $ length xs) xs -instance QC.Arbitrary ArbVector2 where- arbitrary = do- dim <- QC.choose (0,maxDim)- liftA2 ArbVector2- (genVector maxElem dim) (genVector maxElem dim)+cyclicVectorFromList :: [Number_] -> CyclicVector Number_+cyclicVectorFromList = cyclicVectorFromListGen +forCyclicVector ::+ (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>+ QC.Gen a -> (CyclicVector a -> prop) -> QC.Property+forCyclicVector genElem =+ QC.forAllShrink+ (flip genVector genElem . Shape.Cyclic =<< QC.choose (0,maxDim))+ (map cyclicVectorFromListGen . QC.shrink . Vector.toList)+ test :: DocTest.T () test = do- DocTest.printPrefix "Numeric.BLAS.Vector:212: "-{-# LINE 212 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:239: "+{-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 212 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) (ArbVector ys) (ArbVector zs) -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs)))- DocTest.printPrefix "Numeric.BLAS.Vector:221: "-{-# LINE 221 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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)))+ DocTest.printPrefix "Numeric.BLAS.Vector:248: "+{-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 221 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}+ (Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_))+ DocTest.printPrefix "Numeric.BLAS.Vector:249: "+{-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs))+ DocTest.printPrefix "Numeric.BLAS.Vector:254: "+{-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}+ 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)+ DocTest.printPrefix "Numeric.BLAS.Vector:269: "+{-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}+ (cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList []))+ DocTest.printPrefix "Numeric.BLAS.Vector:270: "+{-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}+ (cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1]))+ DocTest.printPrefix "Numeric.BLAS.Vector:271: "+{-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}+ (forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs))+ DocTest.printPrefix "Numeric.BLAS.Vector:291: "+{-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}+ 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_))- DocTest.printPrefix "Numeric.BLAS.Vector:256: "-{-# LINE 256 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:326: "+{-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 256 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys)- DocTest.printPrefix "Numeric.BLAS.Vector:309: "-{-# LINE 309 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 309 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.sum xs == List.sum (Vector.toList xs))- DocTest.printPrefix "Numeric.BLAS.Vector:369: "-{-# LINE 369 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 369 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))- DocTest.printPrefix "Numeric.BLAS.Vector:396: "-{-# LINE 396 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))+ DocTest.printPrefix "Numeric.BLAS.Vector:466: "+{-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 396 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm)- DocTest.printPrefix "Numeric.BLAS.Vector:397: "-{-# LINE 397 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 397 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector 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:398: "-{-# LINE 398 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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)+ DocTest.printPrefix "Numeric.BLAS.Vector:468: "+{-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 398 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs, ArbVector 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:393: "-{-# LINE 393 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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 393 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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:445: "-{-# LINE 445 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:515: "+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 445 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)- DocTest.printPrefix "Numeric.BLAS.Vector:442: "-{-# LINE 442 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)+ DocTest.printPrefix "Numeric.BLAS.Vector:512: "+{-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-} DocTest.example-{-# LINE 442 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-} (Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]) [ExpectedLine [LineChunk "(1,3.0 :+ 4.0)"]]- DocTest.printPrefix "Numeric.BLAS.Vector:478: "-{-# LINE 478 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property-{-# LINE 478 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector 3 dim) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_))))- DocTest.printPrefix "Numeric.BLAS.Vector:488: "-{-# LINE 488 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property-{-# LINE 488 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs))- DocTest.printPrefix "Numeric.BLAS.Vector:489: "-{-# LINE 489 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:548: "+{-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 489 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs))- DocTest.printPrefix "Numeric.BLAS.Vector:490: "-{-# LINE 490 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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_))))+ DocTest.printPrefix "Numeric.BLAS.Vector:558: "+{-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 490 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs))- DocTest.printPrefix "Numeric.BLAS.Vector:506: "-{-# LINE 506 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 506 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs)- DocTest.printPrefix "Numeric.BLAS.Vector:536: "-{-# LINE 536 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 536 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.negate xs == Vector.scale minusOne xs)- DocTest.printPrefix "Numeric.BLAS.Vector:537: "-{-# LINE 537 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 537 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.scale 2 xs == xs |+| xs)+{-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}+ (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 {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> xs |+| ys == ys |+| 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 {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> xs == xs |-| ys |+| ys)- DocTest.printPrefix "Numeric.BLAS.Vector:637: "-{-# LINE 637 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs)+ DocTest.printPrefix "Numeric.BLAS.Vector:676: "+{-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 637 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> xs == Vector.negate (Vector.negate xs))- DocTest.printPrefix "Numeric.BLAS.Vector:650: "-{-# LINE 650 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs)+ DocTest.printPrefix "Numeric.BLAS.Vector:677: "+{-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 650 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (genNumber maxElem) $ \d (ArbVector xs) -> xs == Vector.raise (-d) (Vector.raise d xs))- DocTest.printPrefix "Numeric.BLAS.Vector:667: "-{-# LINE 667 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys)+ DocTest.printPrefix "Numeric.BLAS.Vector:707: "+{-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 667 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> Vector.mul xs ys == Vector.mul ys xs)- DocTest.printPrefix "Numeric.BLAS.Vector:675: "-{-# LINE 675 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs))+ DocTest.printPrefix "Numeric.BLAS.Vector:720: "+{-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 675 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)+{-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)
test/Test/Double/Numeric/BLAS/Vector/Slice.hs view
@@ -9,6 +9,8 @@ {-# LINE 90 "src/Numeric/BLAS/Vector/Slice.hs" #-} import qualified Test.Slice as TestSlice+import Test.Double.Numeric.BLAS.Vector+ (maxElem, maxDim, genVector, number_, real_, complex_) import Test.Double.Type (Number_) import Test.Generator (genNumber) import Test.Utility (approx, approxReal)@@ -27,7 +29,6 @@ import Data.Array.Comfort.Shape ((::+)((::+))) import Data.Tuple.HT (mapPair) import Data.Complex (Complex)-import Control.Monad (replicateM) import Control.Applicative (liftA2) import qualified Test.QuickCheck as QC@@ -36,12 +37,6 @@ type Real_ = RealOf Number_ type Complex_ = Complex Real_ -maxElem :: Integer-maxElem = 10--maxDim :: Int-maxDim = 100- maxDim1 :: Int maxDim1 = 10 @@ -63,25 +58,9 @@ genShape :: QC.Gen Shape genShape = genShapeDim =<< QC.choose (0,maxDim1) -genVector ::- (Shape.C sh, Class.Floating a) =>- sh -> QC.Gen a -> QC.Gen (Vector.Vector sh a)-genVector shape genElem =- fmap (Vector.fromList shape) $- replicateM (Shape.size shape) genElem- forAll_ :: (Show a) => QC.Gen a -> (a -> QC.Property) -> QC.Property forAll_ = QC.forAll -real_ :: QC.Gen Real_-real_ = genNumber maxElem--complex_ :: QC.Gen Complex_-complex_ = genNumber maxElem--number_ :: QC.Gen Number_-number_ = genNumber maxElem- isNonEmpty :: Shape.C sh => VectorSlice.T shA sh a -> Bool isNonEmpty xs = Shape.size (VectorSlice.shape xs) > 0 @@ -150,123 +129,123 @@ test :: DocTest.T () test = do- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:301: "-{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:280: "+{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:303: "-{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:282: "+{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:335: "-{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:314: "+{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:336: "-{-# LINE 336 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:315: "+{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 336 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:419: "-{-# LINE 419 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:398: "+{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 419 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-} (forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:492: "-{-# LINE 492 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:471: "+{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 492 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:503: "-{-# LINE 503 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:482: "+{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 503 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:518: "-{-# LINE 518 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:497: "+{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 518 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:519: "-{-# LINE 519 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:498: "+{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 519 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:520: "-{-# LINE 520 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:499: "+{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 520 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:567: "-{-# LINE 567 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:546: "+{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 567 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:592: "-{-# LINE 592 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:571: "+{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 592 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:603: "-{-# LINE 603 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:582: "+{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 603 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:604: "-{-# LINE 604 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:583: "+{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 604 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:620: "-{-# LINE 620 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:599: "+{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 620 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:650: "-{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:629: "+{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-} (forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:651: "-{-# LINE 651 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:630: "+{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 651 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:710: "-{-# LINE 710 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:689: "+{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 710 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:711: "-{-# LINE 711 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:690: "+{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 711 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:736: "-{-# LINE 736 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:715: "+{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 736 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:749: "-{-# LINE 749 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:728: "+{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 749 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:766: "-{-# LINE 766 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:745: "+{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 766 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:774: "-{-# LINE 774 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:753: "+{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 774 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:898: "-{-# LINE 898 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:877: "+{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 898 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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)
test/Test/Float/Numeric/BLAS/Vector.hs view
@@ -1,14 +1,15 @@ -- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Vector.hs-{-# LINE 98 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 100 "src/Numeric/BLAS/Vector.hs" #-} module Test.Float.Numeric.BLAS.Vector where import Test.DocTest.Base import qualified Test.DocTest.Driver as DocTest -{-# LINE 99 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 101 "src/Numeric/BLAS/Vector.hs" #-} import Test.Float.Type (Number_) import Test.Generator (genNumber)+import Test.Slice (shapeInt) import Test.Utility (approx) import qualified Numeric.BLAS.Vector as Vector import qualified Numeric.Netlib.Class as Class@@ -19,6 +20,8 @@ import Numeric.BLAS.Scalar (RealOf, absolute, minusOne) import Data.Array.Comfort.Storable (Array, (!)) import Data.Complex (Complex((:+)))+import Data.Monoid ((<>))+import Data.Tuple.HT (mapPair) import Control.Applicative (liftA2) import Control.Monad (replicateM) @@ -35,167 +38,244 @@ maxDim :: Int maxDim = 100 -genVector :: (Class.Floating a) => Integer -> Int -> QC.Gen (Vector a)-genVector maxE dim =- fmap (Vector.fromList (Shape.ZeroBased dim)) $- replicateM dim $ genNumber maxE+genVector ::+ (Shape.C sh, Class.Floating a) =>+ sh -> QC.Gen a -> QC.Gen (Vector.Vector sh a)+genVector shape genElem =+ fmap (Vector.fromList shape) $+ replicateM (Shape.size shape) genElem +real_ :: QC.Gen Real_+real_ = genNumber maxElem++complex_ :: QC.Gen Complex_+complex_ = genNumber maxElem++number_ :: QC.Gen Number_+number_ = genNumber maxElem+ isNonEmpty :: Shape.C sh => Array sh a -> Bool isNonEmpty xs = Shape.size (Array.shape xs) > 0 -newtype ArbRealVector = ArbRealVector (Vector Real_)- deriving (Show)+forVector ::+ (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>+ QC.Gen a -> (Vector a -> prop) -> QC.Property+forVector genElem =+ QC.forAllShrink+ (flip genVector genElem . shapeInt =<< QC.choose (0,maxDim))+ (map Vector.autoFromList . QC.shrink . Vector.toList) -instance QC.Arbitrary ArbRealVector where- arbitrary = do- dim <- QC.choose (0,maxDim)- fmap ArbRealVector $ genVector maxElem dim- shrink (ArbRealVector xs) =- map (ArbRealVector . Vector.autoFromList) .- QC.shrink . Vector.toList $ xs+forVector2 ::+ (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>+ QC.Gen a -> (Vector a -> Vector a -> prop) -> QC.Property+forVector2 genElem prop =+ QC.forAllShrink+ (do shape <- fmap shapeInt $ QC.choose (0,maxDim)+ liftA2 (,) (genVector shape genElem) (genVector shape genElem))+ (map (mapPair (Vector.autoFromList, Vector.autoFromList) . unzip) .+ QC.shrink .+ uncurry zip . mapPair (Vector.toList, Vector.toList))+ (uncurry prop) -newtype ArbVector = ArbVector (Vector Number_)- deriving (Show)+type CyclicVector = Vector.Vector (Shape.Cyclic Int) -instance QC.Arbitrary ArbVector where- arbitrary = do- dim <- QC.choose (0,maxDim)- fmap ArbVector $ genVector maxElem dim- shrink (ArbVector xs) =- map (ArbVector . Vector.autoFromList) .- QC.shrink . Vector.toList $ xs+genCyclicVector ::+ (Class.Floating a) =>+ Integer -> Int -> QC.Gen (CyclicVector a)+genCyclicVector maxE dim =+ fmap (Vector.fromList (Shape.Cyclic dim)) $+ replicateM dim $ genNumber maxE -data ArbVector2 =- ArbVector2 (Vector Number_) (Vector Number_)- deriving (Show)+cyclicVectorFromListGen :: (Class.Floating a) => [a] -> CyclicVector a+cyclicVectorFromListGen xs = Vector.fromList (Shape.Cyclic $ length xs) xs -instance QC.Arbitrary ArbVector2 where- arbitrary = do- dim <- QC.choose (0,maxDim)- liftA2 ArbVector2- (genVector maxElem dim) (genVector maxElem dim)+cyclicVectorFromList :: [Number_] -> CyclicVector Number_+cyclicVectorFromList = cyclicVectorFromListGen +forCyclicVector ::+ (QC.Testable prop, QC.Arbitrary a, Class.Floating a, Show a) =>+ QC.Gen a -> (CyclicVector a -> prop) -> QC.Property+forCyclicVector genElem =+ QC.forAllShrink+ (flip genVector genElem . Shape.Cyclic =<< QC.choose (0,maxDim))+ (map cyclicVectorFromListGen . QC.shrink . Vector.toList)+ test :: DocTest.T () test = do- DocTest.printPrefix "Numeric.BLAS.Vector:212: "-{-# LINE 212 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:239: "+{-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 212 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) (ArbVector ys) (ArbVector zs) -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs)))- DocTest.printPrefix "Numeric.BLAS.Vector:221: "-{-# LINE 221 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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)))+ DocTest.printPrefix "Numeric.BLAS.Vector:248: "+{-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 221 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}+ (Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_))+ DocTest.printPrefix "Numeric.BLAS.Vector:249: "+{-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs))+ DocTest.printPrefix "Numeric.BLAS.Vector:254: "+{-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}+ 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)+ DocTest.printPrefix "Numeric.BLAS.Vector:269: "+{-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}+ (cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList []))+ DocTest.printPrefix "Numeric.BLAS.Vector:270: "+{-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}+ (cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1]))+ DocTest.printPrefix "Numeric.BLAS.Vector:271: "+{-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.property+{-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}+ (forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs))+ DocTest.printPrefix "Numeric.BLAS.Vector:291: "+{-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}+ 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_))- DocTest.printPrefix "Numeric.BLAS.Vector:256: "-{-# LINE 256 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:326: "+{-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 256 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys)- DocTest.printPrefix "Numeric.BLAS.Vector:309: "-{-# LINE 309 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 309 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.sum xs == List.sum (Vector.toList xs))- DocTest.printPrefix "Numeric.BLAS.Vector:369: "-{-# LINE 369 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 369 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))- DocTest.printPrefix "Numeric.BLAS.Vector:396: "-{-# LINE 396 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))+ DocTest.printPrefix "Numeric.BLAS.Vector:466: "+{-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 396 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm)- DocTest.printPrefix "Numeric.BLAS.Vector:397: "-{-# LINE 397 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 397 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector 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:398: "-{-# LINE 398 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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)+ DocTest.printPrefix "Numeric.BLAS.Vector:468: "+{-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 398 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs, ArbVector 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:393: "-{-# LINE 393 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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 393 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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:445: "-{-# LINE 445 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:515: "+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 445 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)- DocTest.printPrefix "Numeric.BLAS.Vector:442: "-{-# LINE 442 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)+ DocTest.printPrefix "Numeric.BLAS.Vector:512: "+{-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-} DocTest.example-{-# LINE 442 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-} (Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]) [ExpectedLine [LineChunk "(1,3.0 :+ 4.0)"]]- DocTest.printPrefix "Numeric.BLAS.Vector:478: "-{-# LINE 478 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property-{-# LINE 478 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector 3 dim) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_))))- DocTest.printPrefix "Numeric.BLAS.Vector:488: "-{-# LINE 488 "src/Numeric/BLAS/Vector.hs" #-}- DocTest.property-{-# LINE 488 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs))- DocTest.printPrefix "Numeric.BLAS.Vector:489: "-{-# LINE 489 "src/Numeric/BLAS/Vector.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector:548: "+{-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 489 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs))- DocTest.printPrefix "Numeric.BLAS.Vector:490: "-{-# LINE 490 "src/Numeric/BLAS/Vector.hs" #-}+{-# 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_))))+ DocTest.printPrefix "Numeric.BLAS.Vector:558: "+{-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 490 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs))- DocTest.printPrefix "Numeric.BLAS.Vector:506: "-{-# LINE 506 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 506 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbRealVector xs) -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs)- DocTest.printPrefix "Numeric.BLAS.Vector:536: "-{-# LINE 536 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 536 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.negate xs == Vector.scale minusOne xs)- DocTest.printPrefix "Numeric.BLAS.Vector:537: "-{-# LINE 537 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}+ (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-{-# LINE 537 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> Vector.scale 2 xs == xs |+| xs)+{-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}+ (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 {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> xs |+| ys == ys |+| 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 {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> xs == xs |-| ys |+| ys)- DocTest.printPrefix "Numeric.BLAS.Vector:637: "-{-# LINE 637 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs)+ DocTest.printPrefix "Numeric.BLAS.Vector:676: "+{-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 637 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector xs) -> xs == Vector.negate (Vector.negate xs))- DocTest.printPrefix "Numeric.BLAS.Vector:650: "-{-# LINE 650 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs)+ DocTest.printPrefix "Numeric.BLAS.Vector:677: "+{-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 650 "src/Numeric/BLAS/Vector.hs" #-}- (QC.forAll (genNumber maxElem) $ \d (ArbVector xs) -> xs == Vector.raise (-d) (Vector.raise d xs))- DocTest.printPrefix "Numeric.BLAS.Vector:667: "-{-# LINE 667 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys)+ DocTest.printPrefix "Numeric.BLAS.Vector:707: "+{-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 667 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> Vector.mul xs ys == Vector.mul ys xs)- DocTest.printPrefix "Numeric.BLAS.Vector:675: "-{-# LINE 675 "src/Numeric/BLAS/Vector.hs" #-}+{-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs))+ DocTest.printPrefix "Numeric.BLAS.Vector:720: "+{-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-} DocTest.property-{-# LINE 675 "src/Numeric/BLAS/Vector.hs" #-}- (\(ArbVector2 xs ys) -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)+{-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}+ (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+{-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}+ (forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)
test/Test/Float/Numeric/BLAS/Vector/Slice.hs view
@@ -9,6 +9,8 @@ {-# LINE 90 "src/Numeric/BLAS/Vector/Slice.hs" #-} import qualified Test.Slice as TestSlice+import Test.Float.Numeric.BLAS.Vector+ (maxElem, maxDim, genVector, number_, real_, complex_) import Test.Float.Type (Number_) import Test.Generator (genNumber) import Test.Utility (approx, approxReal)@@ -27,7 +29,6 @@ import Data.Array.Comfort.Shape ((::+)((::+))) import Data.Tuple.HT (mapPair) import Data.Complex (Complex)-import Control.Monad (replicateM) import Control.Applicative (liftA2) import qualified Test.QuickCheck as QC@@ -36,12 +37,6 @@ type Real_ = RealOf Number_ type Complex_ = Complex Real_ -maxElem :: Integer-maxElem = 10--maxDim :: Int-maxDim = 100- maxDim1 :: Int maxDim1 = 10 @@ -63,25 +58,9 @@ genShape :: QC.Gen Shape genShape = genShapeDim =<< QC.choose (0,maxDim1) -genVector ::- (Shape.C sh, Class.Floating a) =>- sh -> QC.Gen a -> QC.Gen (Vector.Vector sh a)-genVector shape genElem =- fmap (Vector.fromList shape) $- replicateM (Shape.size shape) genElem- forAll_ :: (Show a) => QC.Gen a -> (a -> QC.Property) -> QC.Property forAll_ = QC.forAll -real_ :: QC.Gen Real_-real_ = genNumber maxElem--complex_ :: QC.Gen Complex_-complex_ = genNumber maxElem--number_ :: QC.Gen Number_-number_ = genNumber maxElem- isNonEmpty :: Shape.C sh => VectorSlice.T shA sh a -> Bool isNonEmpty xs = Shape.size (VectorSlice.shape xs) > 0 @@ -150,123 +129,123 @@ test :: DocTest.T () test = do- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:301: "-{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:280: "+{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:303: "-{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:282: "+{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:335: "-{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:314: "+{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:336: "-{-# LINE 336 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:315: "+{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 336 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:419: "-{-# LINE 419 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:398: "+{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 419 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-} (forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs))- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:492: "-{-# LINE 492 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:471: "+{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 492 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:503: "-{-# LINE 503 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:482: "+{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 503 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:518: "-{-# LINE 518 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:497: "+{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 518 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:519: "-{-# LINE 519 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:498: "+{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 519 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:520: "-{-# LINE 520 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:499: "+{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 520 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:567: "-{-# LINE 567 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:546: "+{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 567 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:592: "-{-# LINE 592 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:571: "+{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 592 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:603: "-{-# LINE 603 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:582: "+{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 603 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:604: "-{-# LINE 604 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:583: "+{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 604 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:620: "-{-# LINE 620 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:599: "+{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 620 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:650: "-{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:629: "+{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-} (forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs)- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:651: "-{-# LINE 651 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:630: "+{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 651 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:710: "-{-# LINE 710 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:689: "+{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 710 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:711: "-{-# LINE 711 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:690: "+{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 711 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:736: "-{-# LINE 736 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:715: "+{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 736 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:749: "-{-# LINE 749 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:728: "+{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 749 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:766: "-{-# LINE 766 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:745: "+{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 766 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:774: "-{-# LINE 774 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:753: "+{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 774 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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:898: "-{-# LINE 898 "src/Numeric/BLAS/Vector/Slice.hs" #-}+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:877: "+{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-} DocTest.property-{-# LINE 898 "src/Numeric/BLAS/Vector/Slice.hs" #-}+{-# 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)