summaryrefslogtreecommitdiff
path: root/lib/Numeric
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Numeric')
-rw-r--r--lib/Numeric/LinearAlgebra/Tests/Instances.hs (renamed from lib/Numeric/LinearAlgebra/Testing.hs)44
-rw-r--r--lib/Numeric/LinearAlgebra/Tests/Properties.hs50
2 files changed, 58 insertions, 36 deletions
diff --git a/lib/Numeric/LinearAlgebra/Testing.hs b/lib/Numeric/LinearAlgebra/Tests/Instances.hs
index dcf1d8e..fececdb 100644
--- a/lib/Numeric/LinearAlgebra/Testing.hs
+++ b/lib/Numeric/LinearAlgebra/Tests/Instances.hs
@@ -1,32 +1,26 @@
1{-# OPTIONS_GHC -XPatternSignatures #-} 1{-# OPTIONS #-}
2----------------------------------------------------------------------------- 2-----------------------------------------------------------------------------
3{- | 3{- |
4Module : Numeric.LinearAlgebra.Testing 4Module : Numeric.LinearAlgebra.Tests.Instances
5Copyright : (c) Alberto Ruiz 2007 5Copyright : (c) Alberto Ruiz 2008
6License : GPL-style 6License : GPL-style
7 7
8Maintainer : Alberto Ruiz (aruiz at um dot es) 8Maintainer : Alberto Ruiz (aruiz at um dot es)
9Stability : provisional 9Stability : provisional
10Portability : portable 10Portability : portable
11 11
12Some consistency tests. 12Arbitrary instances for vectors, matrices.
13 13
14-} 14-}
15 15
16module Numeric.LinearAlgebra.Testing( 16module Numeric.LinearAlgebra.Tests.Instances(
17 runTests, runBigTests 17 Sq(..),
18 Rot(..),
19 Her(..)
18) where 20) where
19 21
20import Numeric.LinearAlgebra 22import Numeric.LinearAlgebra
21import Test.QuickCheck 23import Test.QuickCheck
22import Debug.Trace
23
24qCheck n = check defaultConfig {configSize = const n}
25
26debug x = trace (show x) x
27
28type RM = Matrix Double
29type CM = Matrix (Complex Double)
30 24
31instance (Arbitrary a, RealFloat a) => Arbitrary (Complex a) where 25instance (Arbitrary a, RealFloat a) => Arbitrary (Complex a) where
32 arbitrary = do 26 arbitrary = do
@@ -51,10 +45,7 @@ instance (Element a, Arbitrary a) => Arbitrary (Matrix a) where
51 return $ (m><n) l 45 return $ (m><n) l
52 coarbitrary = undefined 46 coarbitrary = undefined
53 47
54
55newtype (Sq a) = Sq (Matrix a) deriving Show 48newtype (Sq a) = Sq (Matrix a) deriving Show
56sq (Sq m) = m
57
58instance (Element a, Arbitrary a) => Arbitrary (Sq a) where 49instance (Element a, Arbitrary a) => Arbitrary (Sq a) where
59 arbitrary = do 50 arbitrary = do
60 n <- chooseDim 51 n <- chooseDim
@@ -63,8 +54,6 @@ instance (Element a, Arbitrary a) => Arbitrary (Sq a) where
63 coarbitrary = undefined 54 coarbitrary = undefined
64 55
65newtype (Rot a) = Rot (Matrix a) deriving Show 56newtype (Rot a) = Rot (Matrix a) deriving Show
66rot (Rot a) = a
67
68instance (Field a, Arbitrary a) => Arbitrary (Rot a) where 57instance (Field a, Arbitrary a) => Arbitrary (Rot a) where
69 arbitrary = do 58 arbitrary = do
70 Sq m <- arbitrary 59 Sq m <- arbitrary
@@ -73,26 +62,9 @@ instance (Field a, Arbitrary a) => Arbitrary (Rot a) where
73 coarbitrary = undefined 62 coarbitrary = undefined
74 63
75newtype (Her a) = Her (Matrix a) deriving Show 64newtype (Her a) = Her (Matrix a) deriving Show
76her (Her a) = a
77
78instance (Field a, Arbitrary a) => Arbitrary (Her a) where 65instance (Field a, Arbitrary a) => Arbitrary (Her a) where
79 arbitrary = do 66 arbitrary = do
80 Sq m <- arbitrary 67 Sq m <- arbitrary
81 let m' = m/2 68 let m' = m/2
82 return $ Her (m' + ctrans m') 69 return $ Her (m' + ctrans m')
83 coarbitrary = undefined 70 coarbitrary = undefined
84
85-------------------------------------------------------------------
86
87herR x = her x :: RM
88
89-- | It runs all the tests.
90runTests :: Int -- ^ maximum dimension
91 -> IO ()
92runTests n = do
93 qCheck n (\(Her (m::CM))-> m == ctrans m)
94 qCheck n $ (\m->m==ctrans m) . herR
95
96-- | Some additional tests on big matrices. They take a few minutes.
97runBigTests :: IO ()
98runBigTests = undefined
diff --git a/lib/Numeric/LinearAlgebra/Tests/Properties.hs b/lib/Numeric/LinearAlgebra/Tests/Properties.hs
new file mode 100644
index 0000000..ad31454
--- /dev/null
+++ b/lib/Numeric/LinearAlgebra/Tests/Properties.hs
@@ -0,0 +1,50 @@
1{-# OPTIONS #-}
2-----------------------------------------------------------------------------
3{- |
4Module : Numeric.LinearAlgebra.Tests.Properties
5Copyright : (c) Alberto Ruiz 2008
6License : GPL-style
7
8Maintainer : Alberto Ruiz (aruiz at um dot es)
9Stability : provisional
10Portability : portable
11
12Arbitrary instances for vectors, matrices.
13
14-}
15
16module Numeric.LinearAlgebra.Tests.Properties
17
18where
19
20import Numeric.LinearAlgebra
21import Numeric.LinearAlgebra.Tests.Instances(Sq(..),Her(..),Rot(..))
22
23-- relative error
24dist :: (Normed t, Num t) => t -> t -> Double
25dist a b = r
26 where norm = pnorm Infinity
27 na = norm a
28 nb = norm b
29 nab = norm (a-b)
30 mx = max na nb
31 mn = min na nb
32 r = if mn < eps
33 then mx
34 else nab/mx
35
36infixl 4 |~|
37--a |~| b = a :~10~: b
38a |~| b = dist a b < 10^^(-10)
39
40--data Aprox a = (:~) a Int
41--(~:) :: (Normed a, Num a) => Aprox a -> a -> Bool
42--a :~n~: b = dist a b < 10^^(-n)
43
44------------------------------------------------------
45
46square m = rows m == cols m
47
48unitary m = square m && m <> ctrans m |~| ident (rows m)
49
50hermitian m = square m && m |~| ctrans m