1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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);
}
|