1 #include "test/jemalloc_test.h"
2
TEST_BEGIN(test_bitmap_size)3 TEST_BEGIN(test_bitmap_size)
4 {
5 size_t i, prev_size;
6
7 prev_size = 0;
8 for (i = 1; i <= BITMAP_MAXBITS; i++) {
9 size_t size = bitmap_size(i);
10 assert_true(size >= prev_size,
11 "Bitmap size is smaller than expected");
12 prev_size = size;
13 }
14 }
15 TEST_END
16
TEST_BEGIN(test_bitmap_init)17 TEST_BEGIN(test_bitmap_init)
18 {
19 size_t i;
20
21 for (i = 1; i <= BITMAP_MAXBITS; i++) {
22 bitmap_info_t binfo;
23 bitmap_info_init(&binfo, i);
24 {
25 size_t j;
26 bitmap_t *bitmap = malloc(sizeof(bitmap_t) *
27 bitmap_info_ngroups(&binfo));
28 bitmap_init(bitmap, &binfo);
29
30 for (j = 0; j < i; j++) {
31 assert_false(bitmap_get(bitmap, &binfo, j),
32 "Bit should be unset");
33 }
34 free(bitmap);
35 }
36 }
37 }
38 TEST_END
39
TEST_BEGIN(test_bitmap_set)40 TEST_BEGIN(test_bitmap_set)
41 {
42 size_t i;
43
44 for (i = 1; i <= BITMAP_MAXBITS; i++) {
45 bitmap_info_t binfo;
46 bitmap_info_init(&binfo, i);
47 {
48 size_t j;
49 bitmap_t *bitmap = malloc(sizeof(bitmap_t) *
50 bitmap_info_ngroups(&binfo));
51 bitmap_init(bitmap, &binfo);
52
53 for (j = 0; j < i; j++)
54 bitmap_set(bitmap, &binfo, j);
55 assert_true(bitmap_full(bitmap, &binfo),
56 "All bits should be set");
57 free(bitmap);
58 }
59 }
60 }
61 TEST_END
62
TEST_BEGIN(test_bitmap_unset)63 TEST_BEGIN(test_bitmap_unset)
64 {
65 size_t i;
66
67 for (i = 1; i <= BITMAP_MAXBITS; i++) {
68 bitmap_info_t binfo;
69 bitmap_info_init(&binfo, i);
70 {
71 size_t j;
72 bitmap_t *bitmap = malloc(sizeof(bitmap_t) *
73 bitmap_info_ngroups(&binfo));
74 bitmap_init(bitmap, &binfo);
75
76 for (j = 0; j < i; j++)
77 bitmap_set(bitmap, &binfo, j);
78 assert_true(bitmap_full(bitmap, &binfo),
79 "All bits should be set");
80 for (j = 0; j < i; j++)
81 bitmap_unset(bitmap, &binfo, j);
82 for (j = 0; j < i; j++)
83 bitmap_set(bitmap, &binfo, j);
84 assert_true(bitmap_full(bitmap, &binfo),
85 "All bits should be set");
86 free(bitmap);
87 }
88 }
89 }
90 TEST_END
91
TEST_BEGIN(test_bitmap_sfu)92 TEST_BEGIN(test_bitmap_sfu)
93 {
94 size_t i;
95
96 for (i = 1; i <= BITMAP_MAXBITS; i++) {
97 bitmap_info_t binfo;
98 bitmap_info_init(&binfo, i);
99 {
100 ssize_t j;
101 bitmap_t *bitmap = malloc(sizeof(bitmap_t) *
102 bitmap_info_ngroups(&binfo));
103 bitmap_init(bitmap, &binfo);
104
105 /* Iteratively set bits starting at the beginning. */
106 for (j = 0; j < i; j++) {
107 assert_zd_eq(bitmap_sfu(bitmap, &binfo), j,
108 "First unset bit should be just after "
109 "previous first unset bit");
110 }
111 assert_true(bitmap_full(bitmap, &binfo),
112 "All bits should be set");
113
114 /*
115 * Iteratively unset bits starting at the end, and
116 * verify that bitmap_sfu() reaches the unset bits.
117 */
118 for (j = i - 1; j >= 0; j--) {
119 bitmap_unset(bitmap, &binfo, j);
120 assert_zd_eq(bitmap_sfu(bitmap, &binfo), j,
121 "First unset bit should the bit previously "
122 "unset");
123 bitmap_unset(bitmap, &binfo, j);
124 }
125 assert_false(bitmap_get(bitmap, &binfo, 0),
126 "Bit should be unset");
127
128 /*
129 * Iteratively set bits starting at the beginning, and
130 * verify that bitmap_sfu() looks past them.
131 */
132 for (j = 1; j < i; j++) {
133 bitmap_set(bitmap, &binfo, j - 1);
134 assert_zd_eq(bitmap_sfu(bitmap, &binfo), j,
135 "First unset bit should be just after the "
136 "bit previously set");
137 bitmap_unset(bitmap, &binfo, j);
138 }
139 assert_zd_eq(bitmap_sfu(bitmap, &binfo), i - 1,
140 "First unset bit should be the last bit");
141 assert_true(bitmap_full(bitmap, &binfo),
142 "All bits should be set");
143 free(bitmap);
144 }
145 }
146 }
147 TEST_END
148
149 int
main(void)150 main(void)
151 {
152
153 return (test(
154 test_bitmap_size,
155 test_bitmap_init,
156 test_bitmap_set,
157 test_bitmap_unset,
158 test_bitmap_sfu));
159 }
160