• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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