Chris@25: var assert = require('assert'), Chris@25: complex_array = require('../lib/complex_array'), Chris@25: ComplexArray = complex_array.ComplexArray Chris@25: Chris@25: function assertArrayEquals(first, second) { Chris@25: var message = first + ' != ' + second Chris@25: Chris@25: first.forEach(function(item, i) { Chris@25: assert.equal(item, second[i], message) Chris@25: }) Chris@25: } Chris@25: Chris@25: describe('isComplexArray', function() { Chris@25: it('should correctly identify complex arrays', function() { Chris@25: assert.ok(!complex_array.isComplexArray(1)) Chris@25: assert.ok(!complex_array.isComplexArray([1,2,3])) Chris@25: assert.ok(!complex_array.isComplexArray('string')) Chris@25: Chris@25: assert.ok(complex_array.isComplexArray(new ComplexArray(1))) Chris@25: }) Chris@25: }) Chris@25: Chris@25: describe('ComplexArray', function() { Chris@25: describe('#__constructor__()', function() { Chris@25: it('should construct from a number', function() { Chris@25: var a = new ComplexArray(10) Chris@25: assert.equal(10, a.real.length) Chris@25: assert.equal(10, a.imag.length) Chris@25: assert.equal(0, a.real[0]) Chris@25: assert.equal(0, a.imag[0]) Chris@25: }) Chris@25: Chris@25: it('should construct from a number with a type', function() { Chris@25: var a = new ComplexArray(10, Int32Array) Chris@25: assert.equal(Int32Array, a.ArrayType) Chris@25: assert.equal(10, a.real.length) Chris@25: assert.equal(10, a.imag.length) Chris@25: assert.equal(0, a.real[0]) Chris@25: assert.equal(0, a.imag[0]) Chris@25: }) Chris@25: Chris@25: it('should contruct from a real array', function() { Chris@25: var a = new ComplexArray([1, 2]) Chris@25: assertArrayEquals([1, 2], a.real) Chris@25: assertArrayEquals([0, 0], a.imag) Chris@25: }) Chris@25: Chris@25: it('should contruct from a real array with a type', function() { Chris@25: var a = new ComplexArray([1, 2], Int32Array) Chris@25: assert.equal(Int32Array, a.ArrayType) Chris@25: assertArrayEquals([1, 2], a.real) Chris@25: assertArrayEquals([0, 0], a.imag) Chris@25: }) Chris@25: Chris@25: it('should contruct from another complex array', function() { Chris@25: var a = new ComplexArray(new ComplexArray([1, 2])) Chris@25: assertArrayEquals([1, 2], a.real) Chris@25: assertArrayEquals([0, 0], a.imag) Chris@25: }) Chris@25: }) Chris@25: Chris@25: describe('#map()', function() { Chris@25: it('should alter all values', function() { Chris@25: var a = new ComplexArray([1, 2]) Chris@25: Chris@25: a.map(function(value, i) { Chris@25: value.real *= 10 Chris@25: value.imag = i Chris@25: }) Chris@25: assertArrayEquals([10, 20], a.real) Chris@25: assertArrayEquals([0, 1], a.imag) Chris@25: }) Chris@25: }) Chris@25: Chris@25: describe('#forEach()', function() { Chris@25: it('should touch every value', function() { Chris@25: var Chris@25: a = new ComplexArray([1, 2]), Chris@25: sum = 0 Chris@25: Chris@25: a.imag[0] = 4 Chris@25: a.imag[1] = 8 Chris@25: a.forEach(function(value, i) { Chris@25: sum += value.real Chris@25: sum += value.imag Chris@25: }) Chris@25: assert.equal(15, sum) Chris@25: }) Chris@25: }) Chris@25: Chris@25: describe('#conjugate()', function() { Chris@25: it('should multiply a number', function() { Chris@25: var Chris@25: a = new ComplexArray([1, 2]), Chris@25: b Chris@25: Chris@25: a.imag[0] = 1 Chris@25: a.imag[1] = -2 Chris@25: b = a.conjugate() Chris@25: assertArrayEquals([1, 2], b.real) Chris@25: assertArrayEquals([-1, 2], b.imag) Chris@25: }) Chris@25: }) Chris@25: Chris@25: describe('#magnitude()', function() { Chris@25: it('should give the an array of magnitudes', function() { Chris@25: var a = new ComplexArray([1, 3]) Chris@25: Chris@25: a.imag[0] = 0 Chris@25: a.imag[1] = 4 Chris@25: assertArrayEquals([1, 5], a.magnitude()) Chris@25: }) Chris@25: Chris@25: it('should return an iterable ArrayType object', function() { Chris@25: var Chris@25: sum = 0, Chris@25: a = new ComplexArray([1, 2]) Chris@25: Chris@25: a.magnitude().forEach(function(value, i) { Chris@25: sum += value Chris@25: }) Chris@25: assert.equal(3, sum) Chris@25: }) Chris@25: }) Chris@25: })