summaryrefslogtreecommitdiff
path: root/test/bufread.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/bufread.c')
-rw-r--r--test/bufread.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/test/bufread.c b/test/bufread.c
new file mode 100644
index 0000000..d477946
--- /dev/null
+++ b/test/bufread.c
@@ -0,0 +1,63 @@
+#ifdef LINUX
+#define _GNU_SOURCE
+#endif
+
+#include "assert.h"
+#include "test.h"
+
+#include "dged/bufread.h"
+
+#include <stdint.h>
+#include <unistd.h>
+
+#ifdef LINUX
+#include <sys/mman.h>
+#endif
+
+static void test_read(void) {
+#ifdef LINUX
+ int memfd = memfd_create("bufread-test", 0);
+ ASSERT(memfd >= 0, "Failed to create memfd");
+#endif
+ for (int i = 0; i < 256; ++i) {
+ int a = write(memfd, (uint8_t *)&i, 1);
+ (void)a;
+ }
+ lseek(memfd, 0, SEEK_SET);
+
+ struct bufread *br = bufread_create(memfd, 128);
+ uint8_t buf[32];
+ ssize_t read = bufread_read(br, buf, 32);
+ ASSERT(read > 0, "Expected to be able to read");
+ for (int i = 0; i < 32; ++i) {
+ ASSERT(i == buf[i], "Expected buffer to be monotonically increasing");
+ }
+ bufread_read(br, buf, 32);
+ bufread_read(br, buf, 32);
+ bufread_read(br, buf, 32);
+
+ read = bufread_read(br, buf, 32);
+ ASSERT(read > 0, "Expected to be able to read");
+ for (int i = 0; i < 32; ++i) {
+ ASSERT((i + 128) == buf[i],
+ "Expected buffer to be monotonically increasing");
+ }
+ bufread_destroy(br);
+}
+
+void test_empty_read(void) {
+#ifdef LINUX
+ int memfd = memfd_create("bufread-test", 0);
+ ASSERT(memfd >= 0, "Failed to create memfd");
+#endif
+ struct bufread *br = bufread_create(memfd, 128);
+ uint8_t buf[32];
+ ssize_t read = bufread_read(br, buf, 32);
+ ASSERT(read == 0, "Expected to not be able to read from empty stream");
+ bufread_destroy(br);
+}
+
+void run_bufread_tests(void) {
+ run_test(test_read);
+ run_test(test_empty_read);
+}