#include "unittest/TestSuite.h" #include "pcmaudio/PCMAudio.h" #include "pcmaudio/PCMAudioStream.h" #include static void testInit() { PCMAudio audio; PCMAudio * audioPtr; char * samples3; char samples4[4] = {3, 4, 5, 6}; samples3 = malloc(3); stemobject_assign_vtable(audio, PCMAudio); PCMAudio_init(&audio, 1, 2, 22050, 3, samples3, false); TestCase_assert(audio.vtable == &PCMAudio_class, "Expected %p but got %p", &PCMAudio_class, audio.vtable); TestCase_assert(audio.bytesPerSample == 1, "Expected 1 but got %u", audio.bytesPerSample); TestCase_assert(audio.channelCount == 2, "Expected 2 but got %u", audio.channelCount); TestCase_assert(audio.sampleRate == 22050, "Expected 22050 but got %u", audio.sampleRate); TestCase_assert(audio.frameCount == 3, "Expected 3 but got %u", (unsigned int) audio.frameCount); TestCase_assert(audio.samples == samples3, "Expected %p but got %p", samples3, audio.samples); PCMAudio_dispose(&audio); samples3 = malloc(3); audioPtr = PCMAudio_create(1, 2, 22050, 3, samples3, false); TestCase_assert(audioPtr != NULL, "Expected non-NULL but got NULL"); if (audioPtr == NULL) {return;} // Suppress clang warning TestCase_assert(audioPtr->vtable == &PCMAudio_class, "Expected %p but got %p", &PCMAudio_class, audioPtr->vtable); TestCase_assert(audioPtr->bytesPerSample == 1, "Expected 1 but got %u", audioPtr->bytesPerSample); TestCase_assert(audioPtr->channelCount == 2, "Expected 2 but got %u", audioPtr->channelCount); TestCase_assert(audioPtr->sampleRate == 22050, "Expected 22050 but got %u", audioPtr->sampleRate); TestCase_assert(audioPtr->frameCount == 3, "Expected 3 but got %u", (unsigned int) audioPtr->frameCount); TestCase_assert(audioPtr->samples == samples3, "Expected %p but got %p", samples3, audioPtr->samples); PCMAudio_dispose(audioPtr); stemobject_assign_vtable(audio, PCMAudio); PCMAudio_init(&audio, 2, 3, 44100, 4, samples4, true); TestCase_assert(audio.vtable == &PCMAudio_class, "Expected %p but got %p", &PCMAudio_class, audio.vtable); TestCase_assert(audio.bytesPerSample == 2, "Expected 2 but got %u", audio.bytesPerSample); TestCase_assert(audio.channelCount == 3, "Expected 3 but got %u", audio.channelCount); TestCase_assert(audio.sampleRate == 44100, "Expected 44100 but got %u", audio.sampleRate); TestCase_assert(audio.frameCount == 4, "Expected 4 but got %u", (unsigned int) audio.frameCount); TestCase_assert(audio.samples != samples4, "Pointers expected to differ, but didn't"); TestCase_assert(!memcmp(samples4, audio.samples, 4), "Expected {0x%02X, 0x%02X, 0x%02X, 0x%02X} but got {0x%02X, 0x%02X, 0x%02X, 0x%02X}", samples4[0], samples4[1], samples4[2], samples4[3], ((char *) audio.samples)[0], ((char *) audio.samples)[1], ((char *) audio.samples)[2], ((char *) audio.samples)[3]); PCMAudio_dispose(&audio); audioPtr = PCMAudio_create(2, 3, 44100, 4, samples4, true); TestCase_assert(audioPtr != NULL, "Expected non-NULL but got NULL"); if (audioPtr == NULL) {return;} // Suppress clang warning TestCase_assert(audioPtr->vtable == &PCMAudio_class, "Expected %p but got %p", &PCMAudio_class, audioPtr->vtable); TestCase_assert(audioPtr->bytesPerSample == 2, "Expected 2 but got %u", audioPtr->bytesPerSample); TestCase_assert(audioPtr->channelCount == 3, "Expected 3 but got %u", audioPtr->channelCount); TestCase_assert(audioPtr->sampleRate == 44100, "Expected 44100 but got %u", audioPtr->sampleRate); TestCase_assert(audioPtr->frameCount == 4, "Expected 4 but got %u", (unsigned int) audioPtr->frameCount); TestCase_assert(audioPtr->samples != samples4, "Pointers expected to differ, but didn't"); TestCase_assert(!memcmp(samples4, audioPtr->samples, 4), "Expected {0x%02X, 0x%02X, 0x%02X, 0x%02X} but got {0x%02X, 0x%02X, 0x%02X, 0x%02X}", samples4[0], samples4[1], samples4[2], samples4[3], ((char *) audioPtr->samples)[0], ((char *) audioPtr->samples)[1], ((char *) audioPtr->samples)[2], ((char *) audioPtr->samples)[3]); PCMAudio_dispose(audioPtr); } static void testInitStream() { PCMAudioStream stream; stemobject_assign_vtable(stream, PCMAudioStream); PCMAudioStream_init(&stream, 2, 1, 44100); TestCase_assertPointerEqual(stream.vtable, &PCMAudioStream_class); TestCase_assertUIntEqual(stream.bytesPerSample, 2); TestCase_assertUIntEqual(stream.channelCount, 1); TestCase_assertUIntEqual(stream.sampleRate, 44100); PCMAudioStream_dispose(&stream); stemobject_assign_vtable(stream, PCMAudioStream); PCMAudioStream_init(&stream, 4, 2, 48000); TestCase_assertPointerEqual(stream.vtable, &PCMAudioStream_class); TestCase_assertUIntEqual(stream.bytesPerSample, 4); TestCase_assertUIntEqual(stream.channelCount, 2); TestCase_assertUIntEqual(stream.sampleRate, 48000); PCMAudioStream_dispose(&stream); } TEST_SUITE(PCMAudioTest, testInit, testInitStream)