summaryrefslogtreecommitdiff
path: root/tests/lib.c
blob: aa668039b3d722b2e63a4ce942bb869f80b9fddb (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
64
65
66
67
#include <al/test.h>
#include <al/random.h>

static bool lib_test_add_wrap(void)
{
    AL_TEST_START("lib_add_wrap");

    u32 x = UINT32_MAX - 5;
    x = al_u32_add_wrap(x, 15);
    AL_TEST_EQ(x, 10, u32);

    x = UINT32_MAX;
    x = al_u32_add_wrap(x, 1);
    AL_TEST_EQ(x, 1, u32);

    x = UINT32_MAX - 25;
    x = al_u32_add_wrap(x, 20);
    AL_TEST_EQ(x, UINT32_MAX - 5, u32);
    x = al_u32_add_wrap(x, 6);
    AL_TEST_EQ(x, 1, u32);

    u16 y = UINT16_MAX - 5;
    y = al_u16_add_wrap(y, 15);
    AL_TEST_EQ(y, 10, u16);

    y = UINT16_MAX;
    y = al_u16_add_wrap(y, 1);
    AL_TEST_EQ(y, 1, u16);

    AL_TEST_END();
}

static bool lib_test_add_wrap_atomic(void)
{
    AL_TEST_START("lib_add_wrap_atomic");

    for (u32 i = 0; i < UINT16_MAX - 3; i++) {
        al_inc_u16();
    }

    AL_TEST_EQ(al_inc_u16(), UINT16_MAX - 3, u16);
    AL_TEST_EQ(al_inc_u16(), UINT16_MAX - 2, u16);
    AL_TEST_EQ(al_inc_u16(), UINT16_MAX - 1, u16);
    AL_TEST_EQ(al_inc_u16(), UINT16_MAX, u16);
    AL_TEST_EQ(al_inc_u16(), 0, u16);
    AL_TEST_EQ(al_inc_u16(), 1, u16);
    AL_TEST_EQ(al_inc_u16(), 2, u16);
    AL_TEST_EQ(al_inc_u16(), 3, u16);

    for (u32 i = 0; i < UINT16_MAX - 3; i++) {
        AL_TEST_EQ(al_inc_u16(), i + 4, u16);
    }

    AL_TEST_EQ(al_inc_u16(), 0, u16);

    AL_TEST_END();
}

bool lib_tests_run(void)
{
    AL_TEST_START_GROUP("lib");

    AL_TEST_RUN(lib_test_add_wrap);
    AL_TEST_RUN(lib_test_add_wrap_atomic);

    AL_TEST_END_GROUP();
}