summaryrefslogtreecommitdiff
path: root/test/bufread.c
blob: d4779467c1d52f8f6a84a1db397ce0e62fe3f1c9 (plain)
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);
}