|
@@ -0,0 +1,125 @@
|
|
|
+#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 coreTestRingBuffer() {
|
|
|
+ testReadAndWrite();
|
|
|
+ testOverflow();
|
|
|
+ testRefill();
|
|
|
+ testClear();
|
|
|
+ testOverall();
|
|
|
+}
|