111 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| package auratests.utils;
 | |
| 
 | |
| import kha.simd.Float32x4;
 | |
| import utest.Assert;
 | |
| 
 | |
| import aura.types.AudioBuffer.AudioBufferChannelView;
 | |
| import aura.utils.Interpolator.LinearInterpolator;
 | |
| 
 | |
| class TestLinearInterpolator extends utest.Test {
 | |
| 	static inline var NUM_SAMPLES = 8;
 | |
| 
 | |
| 	function test_isInitializedToTargetValue() {
 | |
| 		final interp = new LinearInterpolator(0.0);
 | |
| 
 | |
| 		Assert.floatEquals(0.0, interp.currentValue);
 | |
| 		Assert.floatEquals(0.0, interp.lastValue);
 | |
| 		Assert.floatEquals(0.0, interp.targetValue);
 | |
| 	}
 | |
| 
 | |
| 	function test_stepSizeIsCorrectForPositiveSteps() {
 | |
| 		final interp = new LinearInterpolator(0.0);
 | |
| 		interp.targetValue = 4.0;
 | |
| 
 | |
| 		final stepSize = interp.getLerpStepSize(NUM_SAMPLES);
 | |
| 		Assert.floatEquals(0.5, stepSize);
 | |
| 	}
 | |
| 
 | |
| 	function test_stepSizeIsCorrectForNegativeSteps() {
 | |
| 		final interp = new LinearInterpolator(0.0);
 | |
| 		interp.targetValue = -4.0;
 | |
| 
 | |
| 		final stepSize = interp.getLerpStepSize(NUM_SAMPLES);
 | |
| 		Assert.floatEquals(-0.5, stepSize);
 | |
| 	}
 | |
| 
 | |
| 	function test_stepsReachTargetValue() {
 | |
| 		final interp = new LinearInterpolator(0.0);
 | |
| 		interp.targetValue = 4.0;
 | |
| 
 | |
| 		final stepSize = interp.getLerpStepSize(NUM_SAMPLES);
 | |
| 
 | |
| 		for (_ in 0...NUM_SAMPLES) {
 | |
| 			interp.currentValue += stepSize;
 | |
| 		}
 | |
| 
 | |
| 		Assert.floatEquals(interp.targetValue, interp.currentValue);
 | |
| 	}
 | |
| 
 | |
| 	function test_updateLastUpdatesLastAndCurrentValue() {
 | |
| 		final interp = new LinearInterpolator(0.0);
 | |
| 
 | |
| 		interp.targetValue = 4.0;
 | |
| 
 | |
| 		interp.updateLast();
 | |
| 		Assert.floatEquals(interp.targetValue, interp.lastValue);
 | |
| 		Assert.floatEquals(interp.targetValue, interp.currentValue);
 | |
| 	}
 | |
| 
 | |
| 	function test_getLerpStepSizes32x4IsCorrectForPositiveSteps() {
 | |
| 		final interp = new LinearInterpolator(0.0);
 | |
| 
 | |
| 		interp.targetValue = 4.0;
 | |
| 		final stepSizes = interp.getLerpStepSizes32x4(NUM_SAMPLES);
 | |
| 
 | |
| 		Assert.floatEquals(0.5, Float32x4.getFast(stepSizes, 0));
 | |
| 		Assert.floatEquals(1.0, Float32x4.getFast(stepSizes, 1));
 | |
| 		Assert.floatEquals(1.5, Float32x4.getFast(stepSizes, 2));
 | |
| 		Assert.floatEquals(2.0, Float32x4.getFast(stepSizes, 3));
 | |
| 	}
 | |
| 
 | |
| 	function test_getLerpStepSizes32x4IsCorrectForNegativeSteps() {
 | |
| 		final interp = new LinearInterpolator(0.0);
 | |
| 
 | |
| 		interp.targetValue = -4.0;
 | |
| 		final stepSizes = interp.getLerpStepSizes32x4(NUM_SAMPLES);
 | |
| 
 | |
| 		Assert.floatEquals(-0.5, Float32x4.getFast(stepSizes, 0));
 | |
| 		Assert.floatEquals(-1.0, Float32x4.getFast(stepSizes, 1));
 | |
| 		Assert.floatEquals(-1.5, Float32x4.getFast(stepSizes, 2));
 | |
| 		Assert.floatEquals(-2.0, Float32x4.getFast(stepSizes, 3));
 | |
| 	}
 | |
| 
 | |
| 	function test_applySIMD32x4() {
 | |
| 		final samples = new AudioBufferChannelView(NUM_SAMPLES);
 | |
| 		for (i in 0...NUM_SAMPLES) {
 | |
| 			samples[i] = 1.0;
 | |
| 		}
 | |
| 
 | |
| 		final interp = new LinearInterpolator(0.0);
 | |
| 		interp.targetValue = 4.0;
 | |
| 
 | |
| 		final stepSizes = interp.getLerpStepSizes32x4(NUM_SAMPLES);
 | |
| 
 | |
| 		interp.applySIMD32x4(samples, 0, stepSizes);
 | |
| 		Assert.floatEquals(0.5, samples[0]);
 | |
| 		Assert.floatEquals(1.0, samples[1]);
 | |
| 		Assert.floatEquals(1.5, samples[2]);
 | |
| 		Assert.floatEquals(2.0, samples[3]);
 | |
| 
 | |
| 		Assert.floatEquals(2.0, interp.currentValue);
 | |
| 
 | |
| 		interp.applySIMD32x4(samples, 4, stepSizes);
 | |
| 		Assert.floatEquals(2.5, samples[4]);
 | |
| 		Assert.floatEquals(3.0, samples[5]);
 | |
| 		Assert.floatEquals(3.5, samples[6]);
 | |
| 		Assert.floatEquals(4.0, samples[7]);
 | |
| 
 | |
| 		Assert.floatEquals(4.0, interp.currentValue);
 | |
| 	}
 | |
| }
 |