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); | ||
|  | 	} | ||
|  | } |