blob: 1ab0bb8ebce785a91dbe9b552bc973c51cf70949 [file] [log] [blame]
Jason Evans86abd0d2013-11-30 15:25:42 -08001#include "test/jemalloc_test.h"
Jason Evans84c8eef2011-03-16 10:30:13 -07002
Jason Evans2a83ed02013-12-08 20:52:21 -08003TEST_BEGIN(test_bitmap_size)
Jason Evans84c8eef2011-03-16 10:30:13 -07004{
5 size_t i, prev_size;
6
7 prev_size = 0;
Jason Evansf97e5ac2014-09-28 14:43:11 -07008 for (i = 1; i <= BITMAP_MAXBITS; i++) {
Christopher Ferrise4294032016-03-02 14:33:02 -08009 bitmap_info_t binfo;
10 size_t size;
11
12 bitmap_info_init(&binfo, i);
13 size = bitmap_size(&binfo);
Jason Evans2a83ed02013-12-08 20:52:21 -080014 assert_true(size >= prev_size,
15 "Bitmap size is smaller than expected");
Jason Evans84c8eef2011-03-16 10:30:13 -070016 prev_size = size;
17 }
18}
Jason Evans2a83ed02013-12-08 20:52:21 -080019TEST_END
Jason Evans84c8eef2011-03-16 10:30:13 -070020
Jason Evans2a83ed02013-12-08 20:52:21 -080021TEST_BEGIN(test_bitmap_init)
Jason Evans84c8eef2011-03-16 10:30:13 -070022{
23 size_t i;
24
Jason Evansf97e5ac2014-09-28 14:43:11 -070025 for (i = 1; i <= BITMAP_MAXBITS; i++) {
Jason Evans84c8eef2011-03-16 10:30:13 -070026 bitmap_info_t binfo;
27 bitmap_info_init(&binfo, i);
28 {
29 size_t j;
Christopher Ferrise4294032016-03-02 14:33:02 -080030 bitmap_t *bitmap = (bitmap_t *)malloc(
31 bitmap_size(&binfo));
Jason Evans84c8eef2011-03-16 10:30:13 -070032 bitmap_init(bitmap, &binfo);
33
Jason Evans2a83ed02013-12-08 20:52:21 -080034 for (j = 0; j < i; j++) {
35 assert_false(bitmap_get(bitmap, &binfo, j),
36 "Bit should be unset");
37 }
Mike Hommey8b499712012-04-24 23:22:02 +020038 free(bitmap);
Jason Evans84c8eef2011-03-16 10:30:13 -070039 }
40 }
41}
Jason Evans2a83ed02013-12-08 20:52:21 -080042TEST_END
Jason Evans84c8eef2011-03-16 10:30:13 -070043
Jason Evans2a83ed02013-12-08 20:52:21 -080044TEST_BEGIN(test_bitmap_set)
Jason Evans84c8eef2011-03-16 10:30:13 -070045{
46 size_t i;
47
Jason Evansf97e5ac2014-09-28 14:43:11 -070048 for (i = 1; i <= BITMAP_MAXBITS; i++) {
Jason Evans84c8eef2011-03-16 10:30:13 -070049 bitmap_info_t binfo;
50 bitmap_info_init(&binfo, i);
51 {
52 size_t j;
Christopher Ferrise4294032016-03-02 14:33:02 -080053 bitmap_t *bitmap = (bitmap_t *)malloc(
54 bitmap_size(&binfo));
Jason Evans84c8eef2011-03-16 10:30:13 -070055 bitmap_init(bitmap, &binfo);
56
57 for (j = 0; j < i; j++)
58 bitmap_set(bitmap, &binfo, j);
Jason Evans2a83ed02013-12-08 20:52:21 -080059 assert_true(bitmap_full(bitmap, &binfo),
60 "All bits should be set");
Mike Hommey8b499712012-04-24 23:22:02 +020061 free(bitmap);
Jason Evans84c8eef2011-03-16 10:30:13 -070062 }
63 }
64}
Jason Evans2a83ed02013-12-08 20:52:21 -080065TEST_END
Jason Evans84c8eef2011-03-16 10:30:13 -070066
Jason Evans2a83ed02013-12-08 20:52:21 -080067TEST_BEGIN(test_bitmap_unset)
Jason Evans84c8eef2011-03-16 10:30:13 -070068{
69 size_t i;
70
Jason Evansf97e5ac2014-09-28 14:43:11 -070071 for (i = 1; i <= BITMAP_MAXBITS; i++) {
Jason Evans84c8eef2011-03-16 10:30:13 -070072 bitmap_info_t binfo;
73 bitmap_info_init(&binfo, i);
74 {
75 size_t j;
Christopher Ferrise4294032016-03-02 14:33:02 -080076 bitmap_t *bitmap = (bitmap_t *)malloc(
77 bitmap_size(&binfo));
Jason Evans84c8eef2011-03-16 10:30:13 -070078 bitmap_init(bitmap, &binfo);
79
80 for (j = 0; j < i; j++)
81 bitmap_set(bitmap, &binfo, j);
Jason Evans2a83ed02013-12-08 20:52:21 -080082 assert_true(bitmap_full(bitmap, &binfo),
83 "All bits should be set");
Jason Evans84c8eef2011-03-16 10:30:13 -070084 for (j = 0; j < i; j++)
85 bitmap_unset(bitmap, &binfo, j);
86 for (j = 0; j < i; j++)
87 bitmap_set(bitmap, &binfo, j);
Jason Evans2a83ed02013-12-08 20:52:21 -080088 assert_true(bitmap_full(bitmap, &binfo),
89 "All bits should be set");
Mike Hommey8b499712012-04-24 23:22:02 +020090 free(bitmap);
Jason Evans84c8eef2011-03-16 10:30:13 -070091 }
92 }
93}
Jason Evans2a83ed02013-12-08 20:52:21 -080094TEST_END
Jason Evans84c8eef2011-03-16 10:30:13 -070095
Jason Evans2a83ed02013-12-08 20:52:21 -080096TEST_BEGIN(test_bitmap_sfu)
Jason Evans84c8eef2011-03-16 10:30:13 -070097{
98 size_t i;
99
Jason Evansf97e5ac2014-09-28 14:43:11 -0700100 for (i = 1; i <= BITMAP_MAXBITS; i++) {
Jason Evans84c8eef2011-03-16 10:30:13 -0700101 bitmap_info_t binfo;
102 bitmap_info_init(&binfo, i);
103 {
104 ssize_t j;
Christopher Ferrise4294032016-03-02 14:33:02 -0800105 bitmap_t *bitmap = (bitmap_t *)malloc(
106 bitmap_size(&binfo));
Jason Evans84c8eef2011-03-16 10:30:13 -0700107 bitmap_init(bitmap, &binfo);
108
109 /* Iteratively set bits starting at the beginning. */
Jason Evans2a83ed02013-12-08 20:52:21 -0800110 for (j = 0; j < i; j++) {
111 assert_zd_eq(bitmap_sfu(bitmap, &binfo), j,
112 "First unset bit should be just after "
113 "previous first unset bit");
114 }
115 assert_true(bitmap_full(bitmap, &binfo),
116 "All bits should be set");
Jason Evans84c8eef2011-03-16 10:30:13 -0700117
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);
Jason Evans2a83ed02013-12-08 20:52:21 -0800124 assert_zd_eq(bitmap_sfu(bitmap, &binfo), j,
125 "First unset bit should the bit previously "
126 "unset");
Jason Evans84c8eef2011-03-16 10:30:13 -0700127 bitmap_unset(bitmap, &binfo, j);
128 }
Jason Evans2a83ed02013-12-08 20:52:21 -0800129 assert_false(bitmap_get(bitmap, &binfo, 0),
130 "Bit should be unset");
Jason Evans84c8eef2011-03-16 10:30:13 -0700131
132 /*
133 * Iteratively set bits starting at the beginning, and
134 * verify that bitmap_sfu() looks past them.
135 */
136 for (j = 1; j < i; j++) {
137 bitmap_set(bitmap, &binfo, j - 1);
Jason Evans2a83ed02013-12-08 20:52:21 -0800138 assert_zd_eq(bitmap_sfu(bitmap, &binfo), j,
139 "First unset bit should be just after the "
140 "bit previously set");
Jason Evans84c8eef2011-03-16 10:30:13 -0700141 bitmap_unset(bitmap, &binfo, j);
142 }
Jason Evans2a83ed02013-12-08 20:52:21 -0800143 assert_zd_eq(bitmap_sfu(bitmap, &binfo), i - 1,
144 "First unset bit should be the last bit");
145 assert_true(bitmap_full(bitmap, &binfo),
146 "All bits should be set");
Mike Hommey8b499712012-04-24 23:22:02 +0200147 free(bitmap);
Jason Evans84c8eef2011-03-16 10:30:13 -0700148 }
149 }
150}
Jason Evans2a83ed02013-12-08 20:52:21 -0800151TEST_END
Jason Evans84c8eef2011-03-16 10:30:13 -0700152
153int
154main(void)
155{
Jason Evans84c8eef2011-03-16 10:30:13 -0700156
Jason Evans2a83ed02013-12-08 20:52:21 -0800157 return (test(
158 test_bitmap_size,
159 test_bitmap_init,
160 test_bitmap_set,
161 test_bitmap_unset,
162 test_bitmap_sfu));
Jason Evans84c8eef2011-03-16 10:30:13 -0700163}