summaryrefslogtreecommitdiff
path: root/test/bufread.c
diff options
context:
space:
mode:
authorAlbert Cervin <albert@acervin.com>2024-09-17 08:47:03 +0200
committerAlbert Cervin <albert@acervin.com>2025-11-01 22:11:14 +0100
commit4459b8b3aa9d73895391785a99dcc87134e80601 (patch)
treea5204f447a0b2b05f63504c7fe958ef9bbf1918a /test/bufread.c
parent4689f3f38277bb64981fc960e8e384e2d065d659 (diff)
downloaddged-4459b8b3aa9d73895391785a99dcc87134e80601.tar.gz
dged-4459b8b3aa9d73895391785a99dcc87134e80601.tar.xz
dged-4459b8b3aa9d73895391785a99dcc87134e80601.zip
More lsp support
This makes the LSP support complete for now: - Completion - Diagnostics - Goto implementation/declaration - Rename - Documentation - Find references
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);
+}