File: dynarray.testc

package info (click to toggle)
cyrus-imapd 3.12.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 60,540 kB
  • sloc: ansic: 280,382; perl: 146,834; javascript: 9,624; sh: 5,730; yacc: 2,660; cpp: 2,263; makefile: 2,103; lex: 675; xml: 621; awk: 303; python: 273; asm: 262
file content (99 lines) | stat: -rw-r--r-- 3,068 bytes parent folder | download | duplicates (9)
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <stdint.h>
#
#include "cunit/cyrunit.h"
#include "xmalloc.h"
#include "dynarray.h"

static void test_basic(void)
{
    struct dynarray *da = dynarray_new(sizeof(uint32_t));
    uint32_t *valp;

    CU_ASSERT_EQUAL(dynarray_size(da), 0);
    CU_ASSERT_PTR_NULL(dynarray_nth(da, 0));
    CU_ASSERT_PTR_NULL(dynarray_nth(da, -1));

    uint32_t val1 = 0xbeefc0de;
    dynarray_append(da, &val1);

    CU_ASSERT_EQUAL(dynarray_size(da), 1);
    valp = dynarray_nth(da, 0);
    CU_ASSERT_EQUAL(*valp, val1);
    valp = dynarray_nth(da, -1);
    CU_ASSERT_EQUAL(*valp, val1);

    uint32_t val2 = 0x00c0fefe;
    dynarray_append(da, &val2);

    CU_ASSERT_EQUAL(dynarray_size(da), 2);
    valp = dynarray_nth(da, 1);
    CU_ASSERT_EQUAL(*valp, val2);
    valp = dynarray_nth(da, -1);
    CU_ASSERT_EQUAL(*valp, val2);

    dynarray_free(&da);
    CU_ASSERT_PTR_NULL(da);
}

#define CU_ASSERT_MEMEQUAL(actual, expected, sz) \
    CU_ASSERT_EQUAL(memcmp(actual, expected, sz), 0)

static void test_set(void)
{
    struct dynarray *da = dynarray_new(sizeof(uint32_t));
    uint32_t val;
    const uint32_t zero = 0;

    CU_ASSERT_EQUAL(da->count, 0);
    CU_ASSERT_PTR_NULL(dynarray_nth(da, 0));
    CU_ASSERT_PTR_NULL(dynarray_nth(da, -1));

    val = 0xdeadbeef;
    dynarray_set(da, 5, &val);
    CU_ASSERT(da->count >= 6);
    CU_ASSERT(da->alloc >= da->count);
    CU_ASSERT_MEMEQUAL(dynarray_nth(da, 0), &zero, sizeof(zero));
    CU_ASSERT_MEMEQUAL(dynarray_nth(da, 1), &zero, sizeof(zero));
    CU_ASSERT_MEMEQUAL(dynarray_nth(da, 2), &zero, sizeof(zero));
    CU_ASSERT_MEMEQUAL(dynarray_nth(da, 3), &zero, sizeof(zero));
    CU_ASSERT_MEMEQUAL(dynarray_nth(da, 4), &zero, sizeof(zero));
    CU_ASSERT_MEMEQUAL(dynarray_nth(da, 5), &val, sizeof(val));
    CU_ASSERT_MEMEQUAL(dynarray_nth(da, -1), &val, sizeof(val));

    dynarray_set(da, 2, &val);
    CU_ASSERT(da->count >= 3);
    CU_ASSERT(da->alloc >= da->count);
    CU_ASSERT_MEMEQUAL(dynarray_nth(da, 0), &zero, sizeof(zero));
    CU_ASSERT_MEMEQUAL(dynarray_nth(da, 1), &zero, sizeof(zero));
    CU_ASSERT_MEMEQUAL(dynarray_nth(da, 2), &val, sizeof(val));
    CU_ASSERT_MEMEQUAL(dynarray_nth(da, 3), &zero, sizeof(zero));
    CU_ASSERT_MEMEQUAL(dynarray_nth(da, 4), &zero, sizeof(zero));
    CU_ASSERT_MEMEQUAL(dynarray_nth(da, 5), &val, sizeof(val));
    CU_ASSERT_MEMEQUAL(dynarray_nth(da, -1), &val, sizeof(val));

    dynarray_free(&da);
}

static void test_truncate(void)
{
    struct dynarray *da = dynarray_new(sizeof(uint32_t));
    uint32_t val;
    for (val = 0; val < 64; val++) dynarray_append(da, &val);
    CU_ASSERT_EQUAL(64, da->count);

    val = 4;
    CU_ASSERT_MEMEQUAL(da->data + sizeof(uint32_t)*4, &val, sizeof(uint32_t));

    dynarray_truncate(da, 65);
    CU_ASSERT_EQUAL(da->count, 65);
    CU_ASSERT_MEMEQUAL(da->data + sizeof(uint32_t)*4, &val, sizeof(uint32_t));

    dynarray_truncate(da, 3);
    CU_ASSERT_EQUAL(da->count, 3);
    val = 0;
    CU_ASSERT_MEMEQUAL(da->data + sizeof(uint32_t)*4, &val, sizeof(uint32_t));

    dynarray_free(&da);
}

/* vim: set ft=c: */