]>
Commit | Line | Data |
---|---|---|
a78e148b | 1 | #define JEMALLOC_MANGLE |
2 | #include "jemalloc_test.h" | |
3 | ||
4 | /* | |
5 | * Avoid using the assert() from jemalloc_internal.h, since it requires | |
6 | * internal libjemalloc functionality. | |
7 | * */ | |
8 | #include <assert.h> | |
9 | ||
10 | /* | |
11 | * Directly include the bitmap code, since it isn't exposed outside | |
12 | * libjemalloc. | |
13 | */ | |
14 | #include "../src/bitmap.c" | |
15 | ||
16 | #if (LG_BITMAP_MAXBITS > 12) | |
17 | # define MAXBITS 4500 | |
18 | #else | |
19 | # define MAXBITS (1U << LG_BITMAP_MAXBITS) | |
20 | #endif | |
21 | ||
22 | static void | |
23 | test_bitmap_size(void) | |
24 | { | |
25 | size_t i, prev_size; | |
26 | ||
27 | prev_size = 0; | |
28 | for (i = 1; i <= MAXBITS; i++) { | |
29 | size_t size = bitmap_size(i); | |
30 | assert(size >= prev_size); | |
31 | prev_size = size; | |
32 | } | |
33 | } | |
34 | ||
35 | static void | |
36 | test_bitmap_init(void) | |
37 | { | |
38 | size_t i; | |
39 | ||
40 | for (i = 1; i <= MAXBITS; i++) { | |
41 | bitmap_info_t binfo; | |
42 | bitmap_info_init(&binfo, i); | |
43 | { | |
44 | size_t j; | |
45 | bitmap_t bitmap[bitmap_info_ngroups(&binfo)]; | |
46 | bitmap_init(bitmap, &binfo); | |
47 | ||
48 | for (j = 0; j < i; j++) | |
49 | assert(bitmap_get(bitmap, &binfo, j) == false); | |
50 | ||
51 | } | |
52 | } | |
53 | } | |
54 | ||
55 | static void | |
56 | test_bitmap_set(void) | |
57 | { | |
58 | size_t i; | |
59 | ||
60 | for (i = 1; i <= MAXBITS; i++) { | |
61 | bitmap_info_t binfo; | |
62 | bitmap_info_init(&binfo, i); | |
63 | { | |
64 | size_t j; | |
65 | bitmap_t bitmap[bitmap_info_ngroups(&binfo)]; | |
66 | bitmap_init(bitmap, &binfo); | |
67 | ||
68 | for (j = 0; j < i; j++) | |
69 | bitmap_set(bitmap, &binfo, j); | |
70 | assert(bitmap_full(bitmap, &binfo)); | |
71 | } | |
72 | } | |
73 | } | |
74 | ||
75 | static void | |
76 | test_bitmap_unset(void) | |
77 | { | |
78 | size_t i; | |
79 | ||
80 | for (i = 1; i <= MAXBITS; i++) { | |
81 | bitmap_info_t binfo; | |
82 | bitmap_info_init(&binfo, i); | |
83 | { | |
84 | size_t j; | |
85 | bitmap_t bitmap[bitmap_info_ngroups(&binfo)]; | |
86 | bitmap_init(bitmap, &binfo); | |
87 | ||
88 | for (j = 0; j < i; j++) | |
89 | bitmap_set(bitmap, &binfo, j); | |
90 | assert(bitmap_full(bitmap, &binfo)); | |
91 | for (j = 0; j < i; j++) | |
92 | bitmap_unset(bitmap, &binfo, j); | |
93 | for (j = 0; j < i; j++) | |
94 | bitmap_set(bitmap, &binfo, j); | |
95 | assert(bitmap_full(bitmap, &binfo)); | |
96 | } | |
97 | } | |
98 | } | |
99 | ||
100 | static void | |
101 | test_bitmap_sfu(void) | |
102 | { | |
103 | size_t i; | |
104 | ||
105 | for (i = 1; i <= MAXBITS; i++) { | |
106 | bitmap_info_t binfo; | |
107 | bitmap_info_init(&binfo, i); | |
108 | { | |
109 | ssize_t j; | |
110 | bitmap_t bitmap[bitmap_info_ngroups(&binfo)]; | |
111 | bitmap_init(bitmap, &binfo); | |
112 | ||
113 | /* Iteratively set bits starting at the beginning. */ | |
114 | for (j = 0; j < i; j++) | |
115 | assert(bitmap_sfu(bitmap, &binfo) == j); | |
116 | assert(bitmap_full(bitmap, &binfo)); | |
117 | ||
118 | /* | |
119 | * Iteratively unset bits starting at the end, and | |
120 | * verify that bitmap_sfu() reaches the unset bits. | |
121 | */ | |
122 | for (j = i - 1; j >= 0; j--) { | |
123 | bitmap_unset(bitmap, &binfo, j); | |
124 | assert(bitmap_sfu(bitmap, &binfo) == j); | |
125 | bitmap_unset(bitmap, &binfo, j); | |
126 | } | |
127 | assert(bitmap_get(bitmap, &binfo, 0) == false); | |
128 | ||
129 | /* | |
130 | * Iteratively set bits starting at the beginning, and | |
131 | * verify that bitmap_sfu() looks past them. | |
132 | */ | |
133 | for (j = 1; j < i; j++) { | |
134 | bitmap_set(bitmap, &binfo, j - 1); | |
135 | assert(bitmap_sfu(bitmap, &binfo) == j); | |
136 | bitmap_unset(bitmap, &binfo, j); | |
137 | } | |
138 | assert(bitmap_sfu(bitmap, &binfo) == i - 1); | |
139 | assert(bitmap_full(bitmap, &binfo)); | |
140 | } | |
141 | } | |
142 | } | |
143 | ||
144 | int | |
145 | main(void) | |
146 | { | |
147 | fprintf(stderr, "Test begin\n"); | |
148 | ||
149 | test_bitmap_size(); | |
150 | test_bitmap_init(); | |
151 | test_bitmap_set(); | |
152 | test_bitmap_unset(); | |
153 | test_bitmap_sfu(); | |
154 | ||
155 | fprintf(stderr, "Test end\n"); | |
156 | return (0); | |
157 | } |