annotate fft/jsfft/test/test-complex_array.js @ 40:223f770b5341 kissfft-double tip

Try a double-precision kissfft
author Chris Cannam
date Wed, 07 Sep 2016 10:40:32 +0100
parents 66f9fd5ac611
children
rev   line source
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 })