diff options
Diffstat (limited to 'test/audio/SampleBufferTest.c')
| -rw-r--r-- | test/audio/SampleBufferTest.c | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/test/audio/SampleBufferTest.c b/test/audio/SampleBufferTest.c new file mode 100644 index 0000000..9909f0f --- /dev/null +++ b/test/audio/SampleBufferTest.c @@ -0,0 +1,134 @@ +#include "audio/AudioSettings.h" +#include "audio/SampleBuffer.h" +#include "unit/TestRunner.h" + +static SampleBuffer _newMockSampleBuffer(void) +{ + return newSampleBuffer(1, 1); +} + +static int _testNewSampleBuffer(void) +{ + SampleBuffer s = _newMockSampleBuffer(); + assertIntEquals(1, s->numChannels); + assertUnsignedLongEquals(1l, s->blocksize); + freeSampleBuffer(s); + return 0; +} + +static int _testNewSampleBufferMultichannel(void) +{ + SampleBuffer s = newSampleBuffer(8, 128); + unsigned int i, j; + assertNotNull(s); + assertIntEquals(8, s->numChannels); + + // Actually write a bunch of samples to expose memory corruption + for (i = 0; i < s->blocksize; ++i) { + for (j = 0; j < s->numChannels; ++j) { + s->samples[j][i] = 0.5f; + } + } + + freeSampleBuffer(s); + return 0; +} + +static int _testClearSampleBuffer(void) +{ + SampleBuffer s = _newMockSampleBuffer(); + s->samples[0][0] = 123; + sampleBufferClear(s); + assertDoubleEquals(0.0, s->samples[0][0], TEST_DEFAULT_TOLERANCE); + freeSampleBuffer(s); + return 0; +} + +static int _testCopyAndMapChannelsSampleBuffers(void) +{ + SampleBuffer s1 = _newMockSampleBuffer(); + SampleBuffer s2 = _newMockSampleBuffer(); + s1->samples[0][0] = 123.0; + assert(sampleBufferCopyAndMapChannels(s2, s1)); + assertDoubleEquals(123.0, s2->samples[0][0], TEST_DEFAULT_TOLERANCE); + freeSampleBuffer(s1); + freeSampleBuffer(s2); + return 0; +} + +static int _testCopyAndMapChannelsSampleBuffersDifferentBlocksizes(void) +{ + SampleBuffer s1 = newSampleBuffer(1, DEFAULT_BLOCKSIZE); + SampleBuffer s2 = _newMockSampleBuffer(); + + s1->samples[0][0] = 123.0; + assertFalse(sampleBufferCopyAndMapChannels(s2, s1)); + // Contents should not change; copying with different sizes is invalid + assertDoubleEquals(123.0, s1->samples[0][0], TEST_DEFAULT_TOLERANCE); + + freeSampleBuffer(s1); + freeSampleBuffer(s2); + return 0; +} + +static int _testCopyAndMapChannelsSampleBuffersDifferentChannelsBigger(void) +{ + SampleBuffer s1 = newSampleBuffer(4, 1); + SampleBuffer s2 = newSampleBuffer(2, 1); + + s2->samples[0][0] = 1.0; + s2->samples[1][0] = 2.0; + + assert(sampleBufferCopyAndMapChannels(s1, s2)); + assertDoubleEquals(1.0, s1->samples[0][0], TEST_DEFAULT_TOLERANCE); + assertDoubleEquals(2.0, s1->samples[1][0], TEST_DEFAULT_TOLERANCE); + assertDoubleEquals(1.0, s1->samples[2][0], TEST_DEFAULT_TOLERANCE); + assertDoubleEquals(2.0, s1->samples[3][0], TEST_DEFAULT_TOLERANCE); + + freeSampleBuffer(s1); + freeSampleBuffer(s2); + return 0; +} + +static int _testCopyAndMapChannelsSampleBuffersDifferentChannelsSmaller(void) +{ + SampleBuffer s1 = newSampleBuffer(1, 1); + SampleBuffer s2 = newSampleBuffer(4, 1); + unsigned int i; + + for (i = 0; i < s1->numChannels; i++) { + s1->samples[i][0] = 1.0; + } + + for (i = 0; i < s2->numChannels; i++) { + s2->samples[i][0] = 2.0; + } + + assert(sampleBufferCopyAndMapChannels(s1, s2)); + assertDoubleEquals(2.0, s1->samples[0][0], TEST_DEFAULT_TOLERANCE); + + freeSampleBuffer(s1); + freeSampleBuffer(s2); + return 0; +} + +static int _testFreeNullSampleBuffer(void) +{ + freeSampleBuffer(NULL); + return 0; +} + +TestSuite addSampleBufferTests(void); +TestSuite addSampleBufferTests(void) +{ + TestSuite testSuite = newTestSuite("SampleBuffer", NULL, NULL); + addTest(testSuite, "NewObject", _testNewSampleBuffer); + addTest(testSuite, "NewSampleBufferMultichannel", _testNewSampleBufferMultichannel); + addTest(testSuite, "ClearSampleBuffer", _testClearSampleBuffer); + addTest(testSuite, "CopyAndMapChannelsSampleBuffers", _testCopyAndMapChannelsSampleBuffers); + addTest(testSuite, "CopyAndMapChannelsSampleBuffersDifferentSizes", _testCopyAndMapChannelsSampleBuffersDifferentBlocksizes); + addTest(testSuite, "CopyAndMapChannelsSampleBuffersDifferentChannelsBigger", _testCopyAndMapChannelsSampleBuffersDifferentChannelsBigger); + addTest(testSuite, "CopyAndMapChannelsSampleBuffersDifferentChannelsSmaller", _testCopyAndMapChannelsSampleBuffersDifferentChannelsSmaller); + addTest(testSuite, "FreeNullSampleBuffer", _testFreeNullSampleBuffer); + return testSuite; +} |
