view src/clojure/contrib/test_contrib/test_complex_numbers.clj @ 10:ef7dbbd6452c

added clojure source goodness
author Robert McIntyre <rlm@mit.edu>
date Sat, 21 Aug 2010 06:25:44 -0400
parents
children
line wrap: on
line source
1 ;; Test routines for complex-numbers.clj
3 ;; by Konrad Hinsen
4 ;; last updated April 2, 2009
6 ;; Copyright (c) Konrad Hinsen, 2008. All rights reserved. The use
7 ;; and distribution terms for this software are covered by the Eclipse
8 ;; Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
9 ;; which can be found in the file epl-v10.html at the root of this
10 ;; distribution. By using this software in any fashion, you are
11 ;; agreeing to be bound by the terms of this license. You must not
12 ;; remove this notice, or any other, from this software.
14 (ns clojure.contrib.test-complex-numbers
15 (:refer-clojure :exclude [+ - * / = < > <= >=])
16 (:use [clojure.test
17 :only (deftest is are run-tests)]
18 [clojure.contrib.generic.arithmetic
19 :only (+ - * /)]
20 [clojure.contrib.generic.comparison
21 :only (= < > <= >=)]
22 [clojure.contrib.generic.math-functions
23 :only (abs approx= conjugate exp sqr sqrt)]
24 [clojure.contrib.complex-numbers
25 :only (complex imaginary real imag)]))
27 (deftest complex-addition
28 (is (= (+ (complex 1 2) (complex 1 2)) (complex 2 4)))
29 (is (= (+ (complex 1 2) (complex -3 -7)) (complex -2 -5)))
30 (is (= (+ (complex -3 -7) (complex 1 2)) (complex -2 -5)))
31 (is (= (+ (complex 1 2) 3) (complex 4 2)))
32 (is (= (+ 3 (complex 1 2)) (complex 4 2)))
33 (is (= (+ (complex 1 2) -1) (imaginary 2)))
34 (is (= (+ -1 (complex 1 2)) (imaginary 2)))
35 (is (= (+ (complex 1 2) (imaginary -2)) 1))
36 (is (= (+ (imaginary -2) (complex 1 2)) 1))
37 (is (= (+ (complex 1 2) (imaginary 5)) (complex 1 7)))
38 (is (= (+ (imaginary 5) (complex 1 2)) (complex 1 7)))
39 (is (= (+ (complex -3 -7) (complex 1 2)) (complex -2 -5)))
40 (is (= (+ (complex 1 2) (complex -3 -7)) (complex -2 -5)))
41 (is (= (+ (complex -3 -7) (complex -3 -7)) (complex -6 -14)))
42 (is (= (+ (complex -3 -7) 3) (imaginary -7)))
43 (is (= (+ 3 (complex -3 -7)) (imaginary -7)))
44 (is (= (+ (complex -3 -7) -1) (complex -4 -7)))
45 (is (= (+ -1 (complex -3 -7)) (complex -4 -7)))
46 (is (= (+ (complex -3 -7) (imaginary -2)) (complex -3 -9)))
47 (is (= (+ (imaginary -2) (complex -3 -7)) (complex -3 -9)))
48 (is (= (+ (complex -3 -7) (imaginary 5)) (complex -3 -2)))
49 (is (= (+ (imaginary 5) (complex -3 -7)) (complex -3 -2)))
50 (is (= (+ 3 (complex 1 2)) (complex 4 2)))
51 (is (= (+ (complex 1 2) 3) (complex 4 2)))
52 (is (= (+ 3 (complex -3 -7)) (imaginary -7)))
53 (is (= (+ (complex -3 -7) 3) (imaginary -7)))
54 (is (= (+ 3 (imaginary -2)) (complex 3 -2)))
55 (is (= (+ (imaginary -2) 3) (complex 3 -2)))
56 (is (= (+ 3 (imaginary 5)) (complex 3 5)))
57 (is (= (+ (imaginary 5) 3) (complex 3 5)))
58 (is (= (+ -1 (complex 1 2)) (imaginary 2)))
59 (is (= (+ (complex 1 2) -1) (imaginary 2)))
60 (is (= (+ -1 (complex -3 -7)) (complex -4 -7)))
61 (is (= (+ (complex -3 -7) -1) (complex -4 -7)))
62 (is (= (+ -1 (imaginary -2)) (complex -1 -2)))
63 (is (= (+ (imaginary -2) -1) (complex -1 -2)))
64 (is (= (+ -1 (imaginary 5)) (complex -1 5)))
65 (is (= (+ (imaginary 5) -1) (complex -1 5)))
66 (is (= (+ (imaginary -2) (complex 1 2)) 1))
67 (is (= (+ (complex 1 2) (imaginary -2)) 1))
68 (is (= (+ (imaginary -2) (complex -3 -7)) (complex -3 -9)))
69 (is (= (+ (complex -3 -7) (imaginary -2)) (complex -3 -9)))
70 (is (= (+ (imaginary -2) 3) (complex 3 -2)))
71 (is (= (+ 3 (imaginary -2)) (complex 3 -2)))
72 (is (= (+ (imaginary -2) -1) (complex -1 -2)))
73 (is (= (+ -1 (imaginary -2)) (complex -1 -2)))
74 (is (= (+ (imaginary -2) (imaginary -2)) (imaginary -4)))
75 (is (= (+ (imaginary -2) (imaginary 5)) (imaginary 3)))
76 (is (= (+ (imaginary 5) (imaginary -2)) (imaginary 3)))
77 (is (= (+ (imaginary 5) (complex 1 2)) (complex 1 7)))
78 (is (= (+ (complex 1 2) (imaginary 5)) (complex 1 7)))
79 (is (= (+ (imaginary 5) (complex -3 -7)) (complex -3 -2)))
80 (is (= (+ (complex -3 -7) (imaginary 5)) (complex -3 -2)))
81 (is (= (+ (imaginary 5) 3) (complex 3 5)))
82 (is (= (+ 3 (imaginary 5)) (complex 3 5)))
83 (is (= (+ (imaginary 5) -1) (complex -1 5)))
84 (is (= (+ -1 (imaginary 5)) (complex -1 5)))
85 (is (= (+ (imaginary 5) (imaginary -2)) (imaginary 3)))
86 (is (= (+ (imaginary -2) (imaginary 5)) (imaginary 3)))
87 (is (= (+ (imaginary 5) (imaginary 5)) (imaginary 10))))
89 (deftest complex-subtraction
90 (is (= (- (complex 1 2) (complex 1 2)) 0))
91 (is (= (- (complex 1 2) (complex -3 -7)) (complex 4 9)))
92 (is (= (- (complex -3 -7) (complex 1 2)) (complex -4 -9)))
93 (is (= (- (complex 1 2) 3) (complex -2 2)))
94 (is (= (- 3 (complex 1 2)) (complex 2 -2)))
95 (is (= (- (complex 1 2) -1) (complex 2 2)))
96 (is (= (- -1 (complex 1 2)) (complex -2 -2)))
97 (is (= (- (complex 1 2) (imaginary -2)) (complex 1 4)))
98 (is (= (- (imaginary -2) (complex 1 2)) (complex -1 -4)))
99 (is (= (- (complex 1 2) (imaginary 5)) (complex 1 -3)))
100 (is (= (- (imaginary 5) (complex 1 2)) (complex -1 3)))
101 (is (= (- (complex -3 -7) (complex 1 2)) (complex -4 -9)))
102 (is (= (- (complex 1 2) (complex -3 -7)) (complex 4 9)))
103 (is (= (- (complex -3 -7) (complex -3 -7)) 0))
104 (is (= (- (complex -3 -7) 3) (complex -6 -7)))
105 (is (= (- 3 (complex -3 -7)) (complex 6 7)))
106 (is (= (- (complex -3 -7) -1) (complex -2 -7)))
107 (is (= (- -1 (complex -3 -7)) (complex 2 7)))
108 (is (= (- (complex -3 -7) (imaginary -2)) (complex -3 -5)))
109 (is (= (- (imaginary -2) (complex -3 -7)) (complex 3 5)))
110 (is (= (- (complex -3 -7) (imaginary 5)) (complex -3 -12)))
111 (is (= (- (imaginary 5) (complex -3 -7)) (complex 3 12)))
112 (is (= (- 3 (complex 1 2)) (complex 2 -2)))
113 (is (= (- (complex 1 2) 3) (complex -2 2)))
114 (is (= (- 3 (complex -3 -7)) (complex 6 7)))
115 (is (= (- (complex -3 -7) 3) (complex -6 -7)))
116 (is (= (- 3 (imaginary -2)) (complex 3 2)))
117 (is (= (- (imaginary -2) 3) (complex -3 -2)))
118 (is (= (- 3 (imaginary 5)) (complex 3 -5)))
119 (is (= (- (imaginary 5) 3) (complex -3 5)))
120 (is (= (- -1 (complex 1 2)) (complex -2 -2)))
121 (is (= (- (complex 1 2) -1) (complex 2 2)))
122 (is (= (- -1 (complex -3 -7)) (complex 2 7)))
123 (is (= (- (complex -3 -7) -1) (complex -2 -7)))
124 (is (= (- -1 (imaginary -2)) (complex -1 2)))
125 (is (= (- (imaginary -2) -1) (complex 1 -2)))
126 (is (= (- -1 (imaginary 5)) (complex -1 -5)))
127 (is (= (- (imaginary 5) -1) (complex 1 5)))
128 (is (= (- (imaginary -2) (complex 1 2)) (complex -1 -4)))
129 (is (= (- (complex 1 2) (imaginary -2)) (complex 1 4)))
130 (is (= (- (imaginary -2) (complex -3 -7)) (complex 3 5)))
131 (is (= (- (complex -3 -7) (imaginary -2)) (complex -3 -5)))
132 (is (= (- (imaginary -2) 3) (complex -3 -2)))
133 (is (= (- 3 (imaginary -2)) (complex 3 2)))
134 (is (= (- (imaginary -2) -1) (complex 1 -2)))
135 (is (= (- -1 (imaginary -2)) (complex -1 2)))
136 (is (= (- (imaginary -2) (imaginary -2)) 0))
137 (is (= (- (imaginary -2) (imaginary 5)) (imaginary -7)))
138 (is (= (- (imaginary 5) (imaginary -2)) (imaginary 7)))
139 (is (= (- (imaginary 5) (complex 1 2)) (complex -1 3)))
140 (is (= (- (complex 1 2) (imaginary 5)) (complex 1 -3)))
141 (is (= (- (imaginary 5) (complex -3 -7)) (complex 3 12)))
142 (is (= (- (complex -3 -7) (imaginary 5)) (complex -3 -12)))
143 (is (= (- (imaginary 5) 3) (complex -3 5)))
144 (is (= (- 3 (imaginary 5)) (complex 3 -5)))
145 (is (= (- (imaginary 5) -1) (complex 1 5)))
146 (is (= (- -1 (imaginary 5)) (complex -1 -5)))
147 (is (= (- (imaginary 5) (imaginary -2)) (imaginary 7)))
148 (is (= (- (imaginary -2) (imaginary 5)) (imaginary -7)))
149 (is (= (- (imaginary 5) (imaginary 5)) 0)))
151 (deftest complex-multiplication
152 (is (= (* (complex 1 2) (complex 1 2)) (complex -3 4)))
153 (is (= (* (complex 1 2) (complex -3 -7)) (complex 11 -13)))
154 (is (= (* (complex -3 -7) (complex 1 2)) (complex 11 -13)))
155 (is (= (* (complex 1 2) 3) (complex 3 6)))
156 (is (= (* 3 (complex 1 2)) (complex 3 6)))
157 (is (= (* (complex 1 2) -1) (complex -1 -2)))
158 (is (= (* -1 (complex 1 2)) (complex -1 -2)))
159 (is (= (* (complex 1 2) (imaginary -2)) (complex 4 -2)))
160 (is (= (* (imaginary -2) (complex 1 2)) (complex 4 -2)))
161 (is (= (* (complex 1 2) (imaginary 5)) (complex -10 5)))
162 (is (= (* (imaginary 5) (complex 1 2)) (complex -10 5)))
163 (is (= (* (complex -3 -7) (complex 1 2)) (complex 11 -13)))
164 (is (= (* (complex 1 2) (complex -3 -7)) (complex 11 -13)))
165 (is (= (* (complex -3 -7) (complex -3 -7)) (complex -40 42)))
166 (is (= (* (complex -3 -7) 3) (complex -9 -21)))
167 (is (= (* 3 (complex -3 -7)) (complex -9 -21)))
168 (is (= (* (complex -3 -7) -1) (complex 3 7)))
169 (is (= (* -1 (complex -3 -7)) (complex 3 7)))
170 (is (= (* (complex -3 -7) (imaginary -2)) (complex -14 6)))
171 (is (= (* (imaginary -2) (complex -3 -7)) (complex -14 6)))
172 (is (= (* (complex -3 -7) (imaginary 5)) (complex 35 -15)))
173 (is (= (* (imaginary 5) (complex -3 -7)) (complex 35 -15)))
174 (is (= (* 3 (complex 1 2)) (complex 3 6)))
175 (is (= (* (complex 1 2) 3) (complex 3 6)))
176 (is (= (* 3 (complex -3 -7)) (complex -9 -21)))
177 (is (= (* (complex -3 -7) 3) (complex -9 -21)))
178 (is (= (* 3 (imaginary -2)) (imaginary -6)))
179 (is (= (* (imaginary -2) 3) (imaginary -6)))
180 (is (= (* 3 (imaginary 5)) (imaginary 15)))
181 (is (= (* (imaginary 5) 3) (imaginary 15)))
182 (is (= (* -1 (complex 1 2)) (complex -1 -2)))
183 (is (= (* (complex 1 2) -1) (complex -1 -2)))
184 (is (= (* -1 (complex -3 -7)) (complex 3 7)))
185 (is (= (* (complex -3 -7) -1) (complex 3 7)))
186 (is (= (* -1 (imaginary -2)) (imaginary 2)))
187 (is (= (* (imaginary -2) -1) (imaginary 2)))
188 (is (= (* -1 (imaginary 5)) (imaginary -5)))
189 (is (= (* (imaginary 5) -1) (imaginary -5)))
190 (is (= (* (imaginary -2) (complex 1 2)) (complex 4 -2)))
191 (is (= (* (complex 1 2) (imaginary -2)) (complex 4 -2)))
192 (is (= (* (imaginary -2) (complex -3 -7)) (complex -14 6)))
193 (is (= (* (complex -3 -7) (imaginary -2)) (complex -14 6)))
194 (is (= (* (imaginary -2) 3) (imaginary -6)))
195 (is (= (* 3 (imaginary -2)) (imaginary -6)))
196 (is (= (* (imaginary -2) -1) (imaginary 2)))
197 (is (= (* -1 (imaginary -2)) (imaginary 2)))
198 (is (= (* (imaginary -2) (imaginary -2)) -4))
199 (is (= (* (imaginary -2) (imaginary 5)) 10))
200 (is (= (* (imaginary 5) (imaginary -2)) 10))
201 (is (= (* (imaginary 5) (complex 1 2)) (complex -10 5)))
202 (is (= (* (complex 1 2) (imaginary 5)) (complex -10 5)))
203 (is (= (* (imaginary 5) (complex -3 -7)) (complex 35 -15)))
204 (is (= (* (complex -3 -7) (imaginary 5)) (complex 35 -15)))
205 (is (= (* (imaginary 5) 3) (imaginary 15)))
206 (is (= (* 3 (imaginary 5)) (imaginary 15)))
207 (is (= (* (imaginary 5) -1) (imaginary -5)))
208 (is (= (* -1 (imaginary 5)) (imaginary -5)))
209 (is (= (* (imaginary 5) (imaginary -2)) 10))
210 (is (= (* (imaginary -2) (imaginary 5)) 10))
211 (is (= (* (imaginary 5) (imaginary 5)) -25)))
213 (deftest complex-division
214 (is (= (/ (complex 1 2) (complex 1 2)) 1))
215 (is (= (/ (complex 1 2) (complex -3 -7)) (complex -17/58 1/58)))
216 (is (= (/ (complex -3 -7) (complex 1 2)) (complex -17/5 -1/5)))
217 (is (= (/ (complex 1 2) 3) (complex 1/3 2/3)))
218 (is (= (/ 3 (complex 1 2)) (complex 3/5 -6/5)))
219 (is (= (/ (complex 1 2) -1) (complex -1 -2)))
220 (is (= (/ -1 (complex 1 2)) (complex -1/5 2/5)))
221 (is (= (/ (complex 1 2) (imaginary -2)) (complex -1 1/2)))
222 (is (= (/ (imaginary -2) (complex 1 2)) (complex -4/5 -2/5)))
223 (is (= (/ (complex 1 2) (imaginary 5)) (complex 2/5 -1/5)))
224 (is (= (/ (imaginary 5) (complex 1 2)) (complex 2 1)))
225 (is (= (/ (complex -3 -7) (complex 1 2)) (complex -17/5 -1/5)))
226 (is (= (/ (complex 1 2) (complex -3 -7)) (complex -17/58 1/58)))
227 (is (= (/ (complex -3 -7) (complex -3 -7)) 1))
228 (is (= (/ (complex -3 -7) 3) (complex -1 -7/3)))
229 (is (= (/ 3 (complex -3 -7)) (complex -9/58 21/58)))
230 (is (= (/ (complex -3 -7) -1) (complex 3 7)))
231 (is (= (/ -1 (complex -3 -7)) (complex 3/58 -7/58)))
232 (is (= (/ (complex -3 -7) (imaginary -2)) (complex 7/2 -3/2)))
233 (is (= (/ (imaginary -2) (complex -3 -7)) (complex 7/29 3/29)))
234 (is (= (/ (complex -3 -7) (imaginary 5)) (complex -7/5 3/5)))
235 (is (= (/ (imaginary 5) (complex -3 -7)) (complex -35/58 -15/58)))
236 (is (= (/ 3 (complex 1 2)) (complex 3/5 -6/5)))
237 (is (= (/ (complex 1 2) 3) (complex 1/3 2/3)))
238 (is (= (/ 3 (complex -3 -7)) (complex -9/58 21/58)))
239 (is (= (/ (complex -3 -7) 3) (complex -1 -7/3)))
240 #_(is (= (/ 3 (imaginary -2)) (imaginary 1.5)))
241 (is (= (/ (imaginary -2) 3) (imaginary -2/3)))
242 (is (= (/ 3 (imaginary 5)) (imaginary -3/5)))
243 (is (= (/ (imaginary 5) 3) (imaginary 5/3)))
244 (is (= (/ -1 (complex 1 2)) (complex -1/5 2/5)))
245 (is (= (/ (complex 1 2) -1) (complex -1 -2)))
246 (is (= (/ -1 (complex -3 -7)) (complex 3/58 -7/58)))
247 (is (= (/ (complex -3 -7) -1) (complex 3 7)))
248 (is (= (/ -1 (imaginary -2)) (imaginary -1/2)))
249 (is (= (/ (imaginary -2) -1) (imaginary 2)))
250 (is (= (/ -1 (imaginary 5)) (imaginary 1/5)))
251 (is (= (/ (imaginary 5) -1) (imaginary -5)))
252 (is (= (/ (imaginary -2) (complex 1 2)) (complex -4/5 -2/5)))
253 (is (= (/ (complex 1 2) (imaginary -2)) (complex -1 1/2)))
254 (is (= (/ (imaginary -2) (complex -3 -7)) (complex 7/29 3/29)))
255 (is (= (/ (complex -3 -7) (imaginary -2)) (complex 7/2 -3/2)))
256 (is (= (/ (imaginary -2) 3) (imaginary -2/3)))
257 (is (= (/ 3 (imaginary -2)) (imaginary 3/2)))
258 (is (= (/ (imaginary -2) -1) (imaginary 2)))
259 (is (= (/ -1 (imaginary -2)) (imaginary -1/2)))
260 (is (= (/ (imaginary -2) (imaginary -2)) 1))
261 (is (= (/ (imaginary -2) (imaginary 5)) -2/5))
262 (is (= (/ (imaginary 5) (imaginary -2)) -5/2))
263 (is (= (/ (imaginary 5) (complex 1 2)) (complex 2 1)))
264 (is (= (/ (complex 1 2) (imaginary 5)) (complex 2/5 -1/5)))
265 (is (= (/ (imaginary 5) (complex -3 -7)) (complex -35/58 -15/58)))
266 (is (= (/ (complex -3 -7) (imaginary 5)) (complex -7/5 3/5)))
267 (is (= (/ (imaginary 5) 3) (imaginary 5/3)))
268 (is (= (/ 3 (imaginary 5)) (imaginary -3/5)))
269 (is (= (/ (imaginary 5) -1) (imaginary -5)))
270 (is (= (/ -1 (imaginary 5)) (imaginary 1/5)))
271 (is (= (/ (imaginary 5) (imaginary -2)) -5/2))
272 (is (= (/ (imaginary -2) (imaginary 5)) -2/5))
273 (is (= (/ (imaginary 5) (imaginary 5)) 1)))
275 (deftest complex-conjugate
276 (is (= (conjugate (complex 1 2)) (complex 1 -2)))
277 (is (= (conjugate (complex -3 -7)) (complex -3 7)))
278 (is (= (conjugate (imaginary -2)) (imaginary 2)))
279 (is (= (conjugate (imaginary 5)) (imaginary -5))))
281 (deftest complex-abs
282 (doseq [c [(complex 1 2) (complex -2 3) (complex 4 -2)
283 (complex -3 -7) (imaginary -2) (imaginary 5)]]
284 (is (approx= (* c (conjugate c))
285 (sqr (abs c))
286 1e-14))))
288 (deftest complex-sqrt
289 (doseq [c [(complex 1 2) (complex -2 3) (complex 4 -2)
290 (complex -3 -7) (imaginary -2) (imaginary 5)]]
291 (let [r (sqrt c)]
292 (is (approx= c (sqr r) 1e-14))
293 (is (>= (real r) 0)))))
295 (deftest complex-exp
296 (is (approx= (exp (complex 1 2))
297 (complex -1.1312043837568135 2.4717266720048188)
298 1e-14))
299 (is (approx= (exp (complex 2 3))
300 (complex -7.3151100949011028 1.0427436562359045)
301 1e-14))
302 (is (approx= (exp (complex 4 -2))
303 (complex -22.720847417619233 -49.645957334580565)
304 1e-14))
305 (is (approx= (exp (complex 3 -7))
306 (complex 15.142531566086868 -13.195928586605717)
307 1e-14))
308 (is (approx= (exp (imaginary -2))
309 (complex -0.41614683654714241 -0.90929742682568171)
310 1e-14))
311 (is (approx= (exp (imaginary 5))
312 (complex 0.2836621854632263 -0.95892427466313845)
313 1e-14)))