OSDN Git Service

480de46ef370a2f9e6fe63727a3aae70a7160001
[ierope/bitcalc.git] / dynamics / test / math.clj
1 (ns test.math
2   (:use clojure.contrib.test-is))
3
4 (require 'src.math)
5 (alias 'mt 'src.math)
6
7 (deftest test-swap
8   (is (= '(d b c a)
9          (mt/swap 0 3 '(a b c d))))
10   (is (= '(b a c d)
11          (mt/swap -3 0 '(a b c d))))
12   (is (= '(a b c d)
13          (mt/swap 1 1 '(a b c d)))))
14
15 (deftest test-search-non-zero
16   (let [m [[0 0 1 2]
17            [0 1 0 1]
18            [0 0 0 3]]]
19     (is (= (mt/search-non-zero m 0)
20            [1 1]))
21     (is (= (mt/search-non-zero m 2)
22            nil))))
23
24 (deftest test-sweep1
25   (let [m [[2 1 1 0]
26            [1 2 4 6]
27            [4 0 3 2]]]
28     (is (= (mt/sweep1 m 0)
29            [[1 1/2 1/2 0]
30             [0 3/2 7/2 6]
31             [0  -2   1 2]]))
32     (is (= (mt/sweep1 m 1)
33            [[3/2 0 -1 -3]
34             [1/2 1  2  3]
35             [  4 0  3  2]]))))
36
37 (deftest test-lin-solve
38   (let [m [[2 1 1 5]
39            [1 2 1 4]
40            [1 1 2 3]]]
41     (is (= (mt/lin-solve m)
42            [[[1 0 0 2]
43              [0 1 0 1]
44              [0 0 1 0]]
45             [[2 2] [1 1] [0 0]]]))))
46
47 (deftest test-m*v
48   (is (= (mt/m*v [[1 2] [3 4]] [5 6])
49          [17 39]))
50   (is (= (mt/m*v [[1 0] [0 1]] [3 4])
51          [3 4]))
52   (is (= (mt/m*v [[1 0 2] [2 1 3]] [1 1 2])
53          [5 9])))
54
55 (deftest test-s*m
56   (is (= (mt/s*m 2 [[1 2] [3 4]])
57          [[2 4] [6 8]])))
58
59 (deftest test-m-m
60   (is (= (mt/m-m [[1 2] [3 4]] [[5 6] [7 8]])
61          [[-4 -4] [-4 -4]]))
62   (is (= (mt/m-m [[1 0] [0 1]] [[1 2] [3 4]])
63          [[0 -2] [-3 -3]])))
64
65 (deftest test-i-mat
66   (is (= (mt/i-mat 0) []))
67   (is (= (mt/i-mat 1) [[1]]))
68   (is (= (mt/i-mat 2) [[1 0] [0 1]]))
69   (is (= (mt/i-mat 3)
70          [[1 0 0]
71           [0 1 0]
72           [0 0 1]])))
73
74 (deftest test-tref
75   (is (= (mt/tref '[up 0 1 2])
76          '[up 0 1 2]
77          ))
78   (is (= (mt/tref '[up 0 [up 1 2] [up 3 4]]
79                   2)
80          '[up 3 4]))
81   (is (= (mt/tref '[up 0 [up 1 2] [up 3 4]]
82                   2 1)
83          4)))
84
85 (deftest test-t+2
86   (is (= (mt/t+2 1 2) 3))
87   (is (= (mt/t+2 '[up 1 2 3]
88                  '[up 4 5 6])
89          '[up 5 7 9]
90          ))
91   (is (= (mt/t+2 '[down 0 [up 1 2] [down 3 4]]
92                  '[down 5 [up 6 7] [down 8 9]])
93          '[down 5 [up 7 9] [down 11 13]]
94          ))
95   (is (= (mt/t+2 '[up 1 2] '[down 3 4])
96          nil
97          )))
98
99 (deftest test-t+
100   (is (= (mt/t+ '[down 0 1 2])
101          '[down 0 1 2]
102          ))
103   (is (= (mt/t+ 1 2) 3))
104   (is (= (mt/t+ '[up 1 2 3]
105                 '[up 4 5 6])
106          '[up 5 7 9]
107          ))
108   (is (= (mt/t+ '[up 1 2 3]
109                 '[up 4 5 6]
110                 '[up 7 8 9])
111          '[up 12 15 18]
112          )))
113
114 (deftest test-t-2
115   (is (= (mt/t-2 1 3) -2))
116   (is (= (mt/t-2 '[up 1  2 3]
117                  '[up 4 -4 5])
118          '[up -3 6 -2]
119          ))
120   (is (= (mt/t-2 '[down  0 [up  1  2] [down  3  4]]
121                  '[down -1 [up -3 -5] [down -7 -9]])
122          '[down 1 [up 4 7] [down 10 13]]
123          ))
124   (is (= (mt/t-2 '[up 1 2] '[down 3 4])
125          nil
126          )))
127
128 (deftest test-t-
129   (is (= (mt/t- '[down 3 [up 1 2]])
130          '[down -3 [up -1 -2]]
131          ))
132   (is (= (mt/t- 1 -3) 4))
133   (is (= (mt/t- '[up 1 2 3]
134                 '[up 3 5 7])
135          '[up -2 -3 -4]
136          ))
137   (is (= (mt/t- '[up 1 2 3]
138                 '[up 3 5 7]
139                 '[up 2 5 8])
140          '[up -4 -8 -12]
141          )))
142
143 (deftest test-t*2
144   (is (= (mt/t*2 '[up 1 2] '[down 3 4])
145          11))
146   (is (= (mt/t*2 2 '[up 2 3])
147          '[up 4 6]
148          ))
149   (is (= (mt/t*2 '[down 3 4] 5)
150          '[down 15 20]
151          ))
152   (is (= (mt/t*2 '[up 1 2]
153                  '[up [down 2 3] [down 3 4]])
154          '[up 8 11]
155          )))
156
157 (deftest test-t*
158   (is (= (mt/t* '[up 2 3])
159          '[up 2 3]
160          ))
161   (is (= (mt/t* 2 '[up 2 3])
162          '[up 4 6]
163          ))
164   (is (= (mt/t* 2
165                 '[up 1 2]
166                 '[up [down 2 3] [down 3 4]])
167          '[up 16 22]
168          )))
169
170 (deftest test-jaco
171   (binding [mt/*dxi* 0.5]
172     (is (= (mt/jaco (fn [[x y]]
173                       [(* 2 x y)
174                        (+ (* 5 x) (* 3 y))
175                        ])
176                     [1 2])
177            [[4 2] [5 3]]))))
178
179 (run-tests)
180