summaryrefslogtreecommitdiff
path: root/lichen.test.c
blob: 68d26d0f8f6b4c8584af9ec18213973b8fc9fd58 (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
#define LILY_IMPLEMENTATION
#include "lichen.h"
#include "lily-test.h"


LILY_FILE_BEGIN(lichen_suite)

LILY_TEST("xorshift output") {
  struct li_xorshift32_t xor;
  li_xorshift32_seed(&xor, 0);
  CHECK_EQ(xor.generator.state, &(xor.state), "%p");
  CHECK_NEQ(xor.state, 0, "%d");
  uint16_t start = xor.state;
  INFO("%p, %p", &(xor.state), xor.generator.state);
  INFO("%d", xor.generator.rand(xor.generator.state));
  INFO("%d, %d", xor.state, *((uint64_t*)xor.generator.state));
  INFO("%d", xor.generator.rand(xor.generator.state));
  INFO("%d, %d", xor.state, *((uint64_t*)xor.generator.state));
  INFO("%d", xor.generator.rand(xor.generator.state));
  INFO("%d, %d", xor.state, *((uint64_t*)xor.generator.state));
  INFO("%d", xor.generator.rand(xor.generator.state));
  INFO("%d, %d", xor.state, *((uint64_t*)xor.generator.state));
  REQUIRE_NEQ(xor.state, start, "%d");
}
#include LILY_PUSH_TEST()



void do_nothing(void *k) {
  k = k;
}
void free_data(void *m) {
  li_free_llnode(m, do_nothing);
}

LILY_TEST("allocate, copy, and destroy llnode") {
  li_llnode_t *n = li_alloc_llnode();
  REQUIRE_NEQ(n, NULL, "%p");
  CHECK_EQ(n->next, NULL, "%p");
  int k = 0;
  n->tag = 4;
  n->data = &k;
  li_llnode_t *m = li_copy_llnode(n);
  REQUIRE_NEQ(m, NULL, "%p");
  CHECK_EQ(m->tag, 4, "%d");
  CHECK_EQ(m->data, &k, "%p");
  CHECK_EQ(m->next, n->next, "%p");
  n->data = m;
  li_free_llnode(n, free_data);
}
#include LILY_PUSH_TEST()


#define LILY_FILE_END
#include LILY_REGISTER_TESTS()


int main() {
  lily_begin();
  lichen_suite();
  lily_finish();
  return 0;
}