Chris@25
|
1 var assert = require('assert'),
|
Chris@25
|
2 complex_array = require('../lib/complex_array'),
|
Chris@25
|
3 ComplexArray = complex_array.ComplexArray
|
Chris@25
|
4
|
Chris@25
|
5 function assertArrayEquals(first, second) {
|
Chris@25
|
6 var message = first + ' != ' + second
|
Chris@25
|
7
|
Chris@25
|
8 first.forEach(function(item, i) {
|
Chris@25
|
9 assert.equal(item, second[i], message)
|
Chris@25
|
10 })
|
Chris@25
|
11 }
|
Chris@25
|
12
|
Chris@25
|
13 describe('isComplexArray', function() {
|
Chris@25
|
14 it('should correctly identify complex arrays', function() {
|
Chris@25
|
15 assert.ok(!complex_array.isComplexArray(1))
|
Chris@25
|
16 assert.ok(!complex_array.isComplexArray([1,2,3]))
|
Chris@25
|
17 assert.ok(!complex_array.isComplexArray('string'))
|
Chris@25
|
18
|
Chris@25
|
19 assert.ok(complex_array.isComplexArray(new ComplexArray(1)))
|
Chris@25
|
20 })
|
Chris@25
|
21 })
|
Chris@25
|
22
|
Chris@25
|
23 describe('ComplexArray', function() {
|
Chris@25
|
24 describe('#__constructor__()', function() {
|
Chris@25
|
25 it('should construct from a number', function() {
|
Chris@25
|
26 var a = new ComplexArray(10)
|
Chris@25
|
27 assert.equal(10, a.real.length)
|
Chris@25
|
28 assert.equal(10, a.imag.length)
|
Chris@25
|
29 assert.equal(0, a.real[0])
|
Chris@25
|
30 assert.equal(0, a.imag[0])
|
Chris@25
|
31 })
|
Chris@25
|
32
|
Chris@25
|
33 it('should construct from a number with a type', function() {
|
Chris@25
|
34 var a = new ComplexArray(10, Int32Array)
|
Chris@25
|
35 assert.equal(Int32Array, a.ArrayType)
|
Chris@25
|
36 assert.equal(10, a.real.length)
|
Chris@25
|
37 assert.equal(10, a.imag.length)
|
Chris@25
|
38 assert.equal(0, a.real[0])
|
Chris@25
|
39 assert.equal(0, a.imag[0])
|
Chris@25
|
40 })
|
Chris@25
|
41
|
Chris@25
|
42 it('should contruct from a real array', function() {
|
Chris@25
|
43 var a = new ComplexArray([1, 2])
|
Chris@25
|
44 assertArrayEquals([1, 2], a.real)
|
Chris@25
|
45 assertArrayEquals([0, 0], a.imag)
|
Chris@25
|
46 })
|
Chris@25
|
47
|
Chris@25
|
48 it('should contruct from a real array with a type', function() {
|
Chris@25
|
49 var a = new ComplexArray([1, 2], Int32Array)
|
Chris@25
|
50 assert.equal(Int32Array, a.ArrayType)
|
Chris@25
|
51 assertArrayEquals([1, 2], a.real)
|
Chris@25
|
52 assertArrayEquals([0, 0], a.imag)
|
Chris@25
|
53 })
|
Chris@25
|
54
|
Chris@25
|
55 it('should contruct from another complex array', function() {
|
Chris@25
|
56 var a = new ComplexArray(new ComplexArray([1, 2]))
|
Chris@25
|
57 assertArrayEquals([1, 2], a.real)
|
Chris@25
|
58 assertArrayEquals([0, 0], a.imag)
|
Chris@25
|
59 })
|
Chris@25
|
60 })
|
Chris@25
|
61
|
Chris@25
|
62 describe('#map()', function() {
|
Chris@25
|
63 it('should alter all values', function() {
|
Chris@25
|
64 var a = new ComplexArray([1, 2])
|
Chris@25
|
65
|
Chris@25
|
66 a.map(function(value, i) {
|
Chris@25
|
67 value.real *= 10
|
Chris@25
|
68 value.imag = i
|
Chris@25
|
69 })
|
Chris@25
|
70 assertArrayEquals([10, 20], a.real)
|
Chris@25
|
71 assertArrayEquals([0, 1], a.imag)
|
Chris@25
|
72 })
|
Chris@25
|
73 })
|
Chris@25
|
74
|
Chris@25
|
75 describe('#forEach()', function() {
|
Chris@25
|
76 it('should touch every value', function() {
|
Chris@25
|
77 var
|
Chris@25
|
78 a = new ComplexArray([1, 2]),
|
Chris@25
|
79 sum = 0
|
Chris@25
|
80
|
Chris@25
|
81 a.imag[0] = 4
|
Chris@25
|
82 a.imag[1] = 8
|
Chris@25
|
83 a.forEach(function(value, i) {
|
Chris@25
|
84 sum += value.real
|
Chris@25
|
85 sum += value.imag
|
Chris@25
|
86 })
|
Chris@25
|
87 assert.equal(15, sum)
|
Chris@25
|
88 })
|
Chris@25
|
89 })
|
Chris@25
|
90
|
Chris@25
|
91 describe('#conjugate()', function() {
|
Chris@25
|
92 it('should multiply a number', function() {
|
Chris@25
|
93 var
|
Chris@25
|
94 a = new ComplexArray([1, 2]),
|
Chris@25
|
95 b
|
Chris@25
|
96
|
Chris@25
|
97 a.imag[0] = 1
|
Chris@25
|
98 a.imag[1] = -2
|
Chris@25
|
99 b = a.conjugate()
|
Chris@25
|
100 assertArrayEquals([1, 2], b.real)
|
Chris@25
|
101 assertArrayEquals([-1, 2], b.imag)
|
Chris@25
|
102 })
|
Chris@25
|
103 })
|
Chris@25
|
104
|
Chris@25
|
105 describe('#magnitude()', function() {
|
Chris@25
|
106 it('should give the an array of magnitudes', function() {
|
Chris@25
|
107 var a = new ComplexArray([1, 3])
|
Chris@25
|
108
|
Chris@25
|
109 a.imag[0] = 0
|
Chris@25
|
110 a.imag[1] = 4
|
Chris@25
|
111 assertArrayEquals([1, 5], a.magnitude())
|
Chris@25
|
112 })
|
Chris@25
|
113
|
Chris@25
|
114 it('should return an iterable ArrayType object', function() {
|
Chris@25
|
115 var
|
Chris@25
|
116 sum = 0,
|
Chris@25
|
117 a = new ComplexArray([1, 2])
|
Chris@25
|
118
|
Chris@25
|
119 a.magnitude().forEach(function(value, i) {
|
Chris@25
|
120 sum += value
|
Chris@25
|
121 })
|
Chris@25
|
122 assert.equal(3, sum)
|
Chris@25
|
123 })
|
Chris@25
|
124 })
|
Chris@25
|
125 }) |