packages feed

comfort-blas-0.0: test/Test/ComplexDouble/Numeric/BLAS/Vector.hs

-- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Vector.hs
{-# LINE 98 "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" #-}
import     Test.ComplexDouble.Type (Number_)
import     Test.Generator (genNumber)
import     Test.Utility (approx)
import     qualified Numeric.BLAS.Vector as Vector
import     qualified Numeric.Netlib.Class as Class
import     qualified Data.Array.Comfort.Shape as Shape
import     qualified Data.Array.Comfort.Storable as Array
import     qualified Data.List as List
import     Numeric.BLAS.Vector ((+++), (|+|), (|-|))
import     Numeric.BLAS.Scalar (RealOf, absolute, minusOne)
import     Data.Array.Comfort.Storable (Array, (!))
import     Data.Complex (Complex((:+)))
import     Control.Applicative (liftA2)
import     Control.Monad (replicateM)

import     qualified Test.QuickCheck as QC
import     Test.QuickCheck ((==>))

type     Vector = Vector.Vector (Shape.ZeroBased Int)
type     Real_ = RealOf Number_
type     Complex_ = Complex Real_

maxElem     :: Integer
maxElem     = 10

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

isNonEmpty     :: Shape.C sh => Array sh a -> Bool
isNonEmpty     xs = Shape.size (Array.shape xs) > 0

newtype     ArbRealVector = ArbRealVector (Vector Real_)
       deriving (Show)

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

newtype     ArbVector = ArbVector (Vector Number_)
       deriving (Show)

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

data     ArbVector2 =
          ArbVector2 (Vector Number_) (Vector Number_)
       deriving (Show)

instance     QC.Arbitrary ArbVector2 where
       arbitrary = do
          dim <- QC.choose (0,maxDim)
          liftA2 ArbVector2
             (genVector maxElem dim) (genVector maxElem dim)

test :: DocTest.T ()
test = do
 DocTest.printPrefix "Numeric.BLAS.Vector:212: "
{-# LINE 212 "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" #-}
 DocTest.property
{-# LINE 221 "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.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" #-}
 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" #-}
 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" #-}
 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" #-}
 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" #-}
 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" #-}
 DocTest.example
{-# LINE 393 "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.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" #-}
 DocTest.example
{-# LINE 442 "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.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" #-}
 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" #-}
 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" #-}
 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" #-}
 DocTest.property
{-# LINE 537 "src/Numeric/BLAS/Vector.hs" #-}
     (\(ArbVector xs) -> Vector.scale 2 xs == xs |+| 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)
 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" #-}
 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" #-}
 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" #-}
 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" #-}
 DocTest.property
{-# LINE 675 "src/Numeric/BLAS/Vector.hs" #-}
     (\(ArbVector2 xs ys) -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)