#include "../Tests.h" #include "core/RingBuffer.h" #include "core/Utility.h" static void testReadAndWrite() { CoreRingBuffer r = CORE_RING_BUFFER(5, sizeof(size_t)); CORE_TEST_SIZE(0, r.length); coreRingBufferAdd(&r, size_t, 4); CORE_TEST_SIZE(1, r.length); CORE_TEST_SIZE(4, coreRingBufferGet(&r, 0, size_t)); CORE_TEST_SIZE(4, coreRingBufferGetC(&r, 0, size_t)); coreRingBufferRemove(&r); CORE_TEST_SIZE(0, r.length); coreDestroyRingBuffer(&r); } static void testOverflow() { CoreRingBuffer r = CORE_RING_BUFFER(3, sizeof(size_t)); coreRingBufferAdd(&r, size_t, 1); coreRingBufferAdd(&r, size_t, 2); coreRingBufferAdd(&r, size_t, 3); coreRingBufferAdd(&r, size_t, 4); coreRingBufferAdd(&r, size_t, 5); CORE_TEST_SIZE(3, r.length); CORE_TEST_SIZE(1, coreRingBufferGet(&r, 0, size_t)); coreRingBufferRemove(&r); CORE_TEST_SIZE(2, r.length); CORE_TEST_SIZE(2, coreRingBufferGet(&r, 0, size_t)); coreRingBufferRemove(&r); CORE_TEST_SIZE(1, r.length); CORE_TEST_SIZE(3, coreRingBufferGet(&r, 0, size_t)); coreRingBufferRemove(&r); CORE_TEST_SIZE(0, r.length); coreDestroyRingBuffer(&r); } static void testRefill() { CoreRingBuffer r = CORE_RING_BUFFER(3, sizeof(size_t)); coreRingBufferAdd(&r, size_t, 1); coreRingBufferAdd(&r, size_t, 2); coreRingBufferAdd(&r, size_t, 3); coreRingBufferAdd(&r, size_t, 4); CORE_TEST_SIZE(3, r.length); CORE_TEST_SIZE(1, coreRingBufferGet(&r, 0, size_t)); coreRingBufferRemove(&r); CORE_TEST_SIZE(2, coreRingBufferGet(&r, 0, size_t)); coreRingBufferRemove(&r); CORE_TEST_SIZE(3, coreRingBufferGet(&r, 0, size_t)); coreRingBufferRemove(&r); CORE_TEST_SIZE(0, r.length); coreRingBufferAdd(&r, size_t, 5); coreRingBufferAdd(&r, size_t, 6); CORE_TEST_SIZE(2, r.length); CORE_TEST_SIZE(5, coreRingBufferGet(&r, 0, size_t)); coreRingBufferRemove(&r); CORE_TEST_SIZE(6, coreRingBufferGet(&r, 0, size_t)); coreRingBufferRemove(&r); CORE_TEST_SIZE(0, r.length); coreDestroyRingBuffer(&r); } static void testClear() { CoreRingBuffer r = CORE_RING_BUFFER(3, sizeof(size_t)); coreRingBufferAdd(&r, size_t, 1); coreRingBufferAdd(&r, size_t, 2); CORE_TEST_SIZE(2, r.length); coreClearRingBuffer(&r); CORE_TEST_SIZE(0, r.length); coreDestroyRingBuffer(&r); } static void testOverall() { CoreRingBuffer ri = CORE_RING_BUFFER(3, sizeof(size_t)); coreRingBufferAdd(&ri, size_t, 1); coreRingBufferAdd(&ri, size_t, 2); coreRingBufferAdd(&ri, size_t, 3); CoreRingBuffer r = CORE_RING_BUFFER(0, 0); coreSwapRingBuffer(&r, &ri); char buffer[128]; coreToStringRingBuffer(&r, buffer, sizeof(buffer), coreToStringSize); CORE_TEST_STRING("[1, 2, 3]", buffer); CORE_TEST_SIZE(3, r.length); coreRingBufferRemove(&r); coreToStringRingBuffer(&r, buffer, sizeof(buffer), coreToStringSize); CORE_TEST_STRING("[2, 3]", buffer); CORE_TEST_SIZE(2, r.length); coreRingBufferAdd(&r, size_t, 4); coreToStringRingBuffer(&r, buffer, sizeof(buffer), coreToStringSize); CORE_TEST_STRING("[2, 3, 4]", buffer); CORE_TEST_SIZE(3, r.length); coreRingBufferRemove(&r); coreToStringRingBuffer(&r, buffer, sizeof(buffer), coreToStringSize); CORE_TEST_STRING("[3, 4]", buffer); CORE_TEST_SIZE(2, r.length); coreRingBufferAdd(&r, size_t, 5); coreToStringRingBuffer(&r, buffer, sizeof(buffer), coreToStringSize); CORE_TEST_STRING("[3, 4, 5]", buffer); CORE_TEST_SIZE(3, r.length); coreRingBufferRemove(&r); coreToStringRingBuffer(&r, buffer, sizeof(buffer), coreToStringSize); CORE_TEST_STRING("[4, 5]", buffer); CORE_TEST_SIZE(2, r.length); coreClearRingBuffer(&r); coreToStringRingBuffer(&r, buffer, sizeof(buffer), coreToStringSize); CORE_TEST_STRING("[]", buffer); CORE_TEST_SIZE(0, r.length); coreDestroyRingBuffer(&r); coreDestroyRingBuffer(&ri); } void testRingBuffer() { testReadAndWrite(); testOverflow(); testRefill(); testClear(); testOverall(); }