diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
commit | c04dcc2e7d834218ef2d4194331e383402495ae1 (patch) | |
tree | 7333e38d10d75386e60f336b80c2443c1166031d /lib/libUPnP/Neptune/Source/Tests/RingBuffer1/RingBufferTest1.cpp | |
parent | Initial commit. (diff) | |
download | kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip |
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | lib/libUPnP/Neptune/Source/Tests/RingBuffer1/RingBufferTest1.cpp | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/lib/libUPnP/Neptune/Source/Tests/RingBuffer1/RingBufferTest1.cpp b/lib/libUPnP/Neptune/Source/Tests/RingBuffer1/RingBufferTest1.cpp new file mode 100644 index 0000000..4347182 --- /dev/null +++ b/lib/libUPnP/Neptune/Source/Tests/RingBuffer1/RingBufferTest1.cpp @@ -0,0 +1,113 @@ +/***************************************************************** +| +| RingBuffer Test Program 1 +| +| (c) 2001-2005 Gilles Boccon-Gibod +| Author: Gilles Boccon-Gibod (bok@bok.net) +| + ****************************************************************/ + +/*---------------------------------------------------------------------- +| includes ++---------------------------------------------------------------------*/ +#include "Neptune.h" +#include <stdlib.h> + +#if defined(WIN32) +#include <crtdbg.h> +#endif + +const unsigned int BUFFER_SIZE = 17; + +/*---------------------------------------------------------------------- +| ReadChunk ++---------------------------------------------------------------------*/ +static NPT_Result +ReadChunk(NPT_RingBuffer& buffer) +{ + static unsigned int total_read = 0; + unsigned int chunk = rand()%BUFFER_SIZE; + unsigned int can_read = buffer.GetAvailable(); + if (chunk > can_read) chunk = can_read; + if (chunk == 0) return NPT_SUCCESS; + + // read a chunk + unsigned char bytes[BUFFER_SIZE]; + NPT_CHECK(buffer.Read(bytes, chunk)); + + // check values + for (unsigned int i=0; i<chunk; i++) { + unsigned int index = total_read+i; + unsigned char expected = index & 0xFF; + if (bytes[i] != expected) { + printf("unexpected byte at index %d (expected %d, got %d)\n", + index, expected, bytes[i]); + return NPT_FAILURE; + } + } + total_read += chunk; + + return NPT_SUCCESS; +} + +/*---------------------------------------------------------------------- +| WriteChunk ++---------------------------------------------------------------------*/ +static NPT_Result +WriteChunk(NPT_RingBuffer& buffer) +{ + static unsigned int total_written = 0; + unsigned int chunk = rand()%BUFFER_SIZE; + unsigned int can_write = buffer.GetSpace(); + if (chunk > can_write) chunk = can_write; + if (chunk == 0) return NPT_SUCCESS; + + // generate buffer + unsigned char bytes[BUFFER_SIZE]; + for (unsigned int i=0; i<chunk; i++) { + unsigned int index = total_written+i; + bytes[i] = index&0xFF; + } + + // write chunk + NPT_CHECK(buffer.Write(bytes, chunk)); + total_written += chunk; + + return NPT_SUCCESS; +} + +/*---------------------------------------------------------------------- +| main ++---------------------------------------------------------------------*/ +int +main(int /*argc*/, char** /*argv*/) +{ + // setup debugging +#if defined(WIN32) && defined(_DEBUG) + int flags = _crtDbgFlag | + _CRTDBG_ALLOC_MEM_DF | + _CRTDBG_DELAY_FREE_MEM_DF | + _CRTDBG_CHECK_ALWAYS_DF; + + _CrtSetDbgFlag(flags); + //AllocConsole(); + //freopen("CONOUT$", "w", stdout); +#endif + + NPT_RingBuffer buffer(BUFFER_SIZE); + + for (int i=0; i<100000000; i++) { + if (NPT_FAILED(WriteChunk(buffer))) { + printf("WriteChunk failed\n"); + return 1; + } + if (NPT_FAILED(ReadChunk(buffer))) { + printf("ReadChunk failed\n"); + return 1; + } + } + + printf("RingBufferTest1 passed\n"); + + return 0; +} |