forked from LeenkxTeam/LNXSDK
Update Files
This commit is contained in:
92
lib/aura/Tests/auratests/math/TestFFT.hx
Normal file
92
lib/aura/Tests/auratests/math/TestFFT.hx
Normal file
@ -0,0 +1,92 @@
|
||||
package auratests.math;
|
||||
|
||||
import utest.Assert;
|
||||
|
||||
import aura.math.FFT;
|
||||
|
||||
import Utils;
|
||||
|
||||
@:depends(auratests.types.TestComplexArray)
|
||||
class TestFFT extends utest.Test {
|
||||
|
||||
function test_bitReverseUint32() {
|
||||
// Haxe has some issue with signed/unsigned ints here, so we instead
|
||||
// compare the individual strings as bits. This also makes the output in
|
||||
// case of assertion failures much nicer to look at.
|
||||
Assert.equals(Utils.int32ToBytesString(0xFF000000), Utils.int32ToBytesString(@:privateAccess aura.math.FFT.bitReverseUint32(0x000000FF, 32)));
|
||||
Assert.equals(Utils.int32ToBytesString(0x00FF0000), Utils.int32ToBytesString(@:privateAccess aura.math.FFT.bitReverseUint32(0x0000FF00, 32)));
|
||||
Assert.equals(Utils.int32ToBytesString(0x0000FF00), Utils.int32ToBytesString(@:privateAccess aura.math.FFT.bitReverseUint32(0x00FF0000, 32)));
|
||||
Assert.equals(Utils.int32ToBytesString(0x000000FF), Utils.int32ToBytesString(@:privateAccess aura.math.FFT.bitReverseUint32(0xFF000000, 32)));
|
||||
|
||||
Assert.equals(Utils.int32ToBytesString(0xC0000000), Utils.int32ToBytesString(@:privateAccess aura.math.FFT.bitReverseUint32(0x00000003, 32)));
|
||||
Assert.equals(Utils.int32ToBytesString(0x20000000), Utils.int32ToBytesString(@:privateAccess aura.math.FFT.bitReverseUint32(0x00000004, 32)));
|
||||
|
||||
Assert.equals(Utils.int32ToBytesString(0x00FF0000), Utils.int32ToBytesString(@:privateAccess aura.math.FFT.bitReverseUint32(0x000000FF, 24)));
|
||||
Assert.equals(Utils.int32ToBytesString(0x0000FF00), Utils.int32ToBytesString(@:privateAccess aura.math.FFT.bitReverseUint32(0x0000FF00, 24)));
|
||||
Assert.equals(Utils.int32ToBytesString(0x000000FF), Utils.int32ToBytesString(@:privateAccess aura.math.FFT.bitReverseUint32(0x00FF0000, 24)));
|
||||
Assert.equals(Utils.int32ToBytesString(0x0000FF00), Utils.int32ToBytesString(@:privateAccess aura.math.FFT.bitReverseUint32(0x000000FF, 16)));
|
||||
Assert.equals(Utils.int32ToBytesString(0x00000003), Utils.int32ToBytesString(@:privateAccess aura.math.FFT.bitReverseUint32(0x00000018, 5)));
|
||||
}
|
||||
|
||||
function test_RealValuedFFT() {
|
||||
|
||||
final realFFT = new RealValuedFFT(64, 2, 1);
|
||||
|
||||
final inputBuffer = realFFT.getInput(0);
|
||||
for (i in 0...realFFT.size) {
|
||||
inputBuffer[i] = Math.sin(i / realFFT.size * 2 * Math.PI * 8);
|
||||
}
|
||||
|
||||
realFFT.forwardFFT(0, 0);
|
||||
|
||||
var maxIdx = 0;
|
||||
var maxVal = realFFT.getOutput(0)[0].real;
|
||||
for (i in 1...realFFT.size) {
|
||||
final val = realFFT.getOutput(0)[i].real;
|
||||
if (val > maxVal) {
|
||||
maxVal = val;
|
||||
maxIdx = i;
|
||||
}
|
||||
}
|
||||
Assert.equals(8, maxIdx);
|
||||
|
||||
realFFT.inverseFFT(1, 0);
|
||||
|
||||
// Assert that ifft(fft(array)) == array
|
||||
for (i in 0...realFFT.size) {
|
||||
Assert.floatEquals(realFFT.getInput(0)[i], realFFT.getInput(1)[i]);
|
||||
}
|
||||
}
|
||||
|
||||
function test_ComplexValuedFFT() {
|
||||
|
||||
final cplxFFT = new ComplexValuedFFT(64, 2, 1);
|
||||
|
||||
final inputBuffer = cplxFFT.getInput(0);
|
||||
for (i in 0...cplxFFT.size) {
|
||||
inputBuffer[i].real = Math.sin(i / cplxFFT.size * 2 * Math.PI * 8);
|
||||
inputBuffer[i].imag = 0.0;
|
||||
}
|
||||
|
||||
cplxFFT.forwardFFT(0, 0);
|
||||
|
||||
// var maxIdx = 0;
|
||||
// var maxVal = cplxFFT.getOutput(0)[0].real;
|
||||
// for (i in 1...cplxFFT.size) {
|
||||
// final val = cplxFFT.getOutput(0)[i].real;
|
||||
// if (val > maxVal) {
|
||||
// maxVal = val;
|
||||
// maxIdx = i;
|
||||
// }
|
||||
// }
|
||||
// Assert.equals(8, maxIdx);
|
||||
|
||||
cplxFFT.inverseFFT(1, 0);
|
||||
|
||||
// Assert that ifft(fft(array)) == array
|
||||
for (i in 0...cplxFFT.size) {
|
||||
Assert.floatEquals(cplxFFT.getInput(0)[i].real, cplxFFT.getInput(1)[i].real);
|
||||
Assert.floatEquals(cplxFFT.getInput(0)[i].imag, cplxFFT.getInput(1)[i].imag);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user