diff options
Diffstat (limited to 'lib/Numeric/LinearAlgebra/Tests/Instances.hs')
-rw-r--r-- | lib/Numeric/LinearAlgebra/Tests/Instances.hs | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/lib/Numeric/LinearAlgebra/Tests/Instances.hs b/lib/Numeric/LinearAlgebra/Tests/Instances.hs new file mode 100644 index 0000000..fececdb --- /dev/null +++ b/lib/Numeric/LinearAlgebra/Tests/Instances.hs | |||
@@ -0,0 +1,70 @@ | |||
1 | {-# OPTIONS #-} | ||
2 | ----------------------------------------------------------------------------- | ||
3 | {- | | ||
4 | Module : Numeric.LinearAlgebra.Tests.Instances | ||
5 | Copyright : (c) Alberto Ruiz 2008 | ||
6 | License : GPL-style | ||
7 | |||
8 | Maintainer : Alberto Ruiz (aruiz at um dot es) | ||
9 | Stability : provisional | ||
10 | Portability : portable | ||
11 | |||
12 | Arbitrary instances for vectors, matrices. | ||
13 | |||
14 | -} | ||
15 | |||
16 | module Numeric.LinearAlgebra.Tests.Instances( | ||
17 | Sq(..), | ||
18 | Rot(..), | ||
19 | Her(..) | ||
20 | ) where | ||
21 | |||
22 | import Numeric.LinearAlgebra | ||
23 | import Test.QuickCheck | ||
24 | |||
25 | instance (Arbitrary a, RealFloat a) => Arbitrary (Complex a) where | ||
26 | arbitrary = do | ||
27 | r <- arbitrary | ||
28 | i <- arbitrary | ||
29 | return (r:+i) | ||
30 | coarbitrary = undefined | ||
31 | |||
32 | chooseDim = sized $ \m -> choose (1,max 1 m) | ||
33 | |||
34 | instance (Field a, Arbitrary a) => Arbitrary (Vector a) where | ||
35 | arbitrary = do m <- chooseDim | ||
36 | l <- vector m | ||
37 | return $ fromList l | ||
38 | coarbitrary = undefined | ||
39 | |||
40 | instance (Element a, Arbitrary a) => Arbitrary (Matrix a) where | ||
41 | arbitrary = do | ||
42 | m <- chooseDim | ||
43 | n <- chooseDim | ||
44 | l <- vector (m*n) | ||
45 | return $ (m><n) l | ||
46 | coarbitrary = undefined | ||
47 | |||
48 | newtype (Sq a) = Sq (Matrix a) deriving Show | ||
49 | instance (Element a, Arbitrary a) => Arbitrary (Sq a) where | ||
50 | arbitrary = do | ||
51 | n <- chooseDim | ||
52 | l <- vector (n*n) | ||
53 | return $ Sq $ (n><n) l | ||
54 | coarbitrary = undefined | ||
55 | |||
56 | newtype (Rot a) = Rot (Matrix a) deriving Show | ||
57 | instance (Field a, Arbitrary a) => Arbitrary (Rot a) where | ||
58 | arbitrary = do | ||
59 | Sq m <- arbitrary | ||
60 | let (q,_) = qr m | ||
61 | return (Rot q) | ||
62 | coarbitrary = undefined | ||
63 | |||
64 | newtype (Her a) = Her (Matrix a) deriving Show | ||
65 | instance (Field a, Arbitrary a) => Arbitrary (Her a) where | ||
66 | arbitrary = do | ||
67 | Sq m <- arbitrary | ||
68 | let m' = m/2 | ||
69 | return $ Her (m' + ctrans m') | ||
70 | coarbitrary = undefined | ||