Jason Evans | 86abd0d | 2013-11-30 15:25:42 -0800 | [diff] [blame] | 1 | #include "test/jemalloc_test.h" |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 2 | |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 3 | TEST_BEGIN(test_bitmap_size) |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 4 | { |
| 5 | size_t i, prev_size; |
| 6 | |
| 7 | prev_size = 0; |
Jason Evans | f97e5ac | 2014-09-28 14:43:11 -0700 | [diff] [blame] | 8 | for (i = 1; i <= BITMAP_MAXBITS; i++) { |
Christopher Ferris | e429403 | 2016-03-02 14:33:02 -0800 | [diff] [blame] | 9 | bitmap_info_t binfo; |
| 10 | size_t size; |
| 11 | |
| 12 | bitmap_info_init(&binfo, i); |
| 13 | size = bitmap_size(&binfo); |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 14 | assert_true(size >= prev_size, |
| 15 | "Bitmap size is smaller than expected"); |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 16 | prev_size = size; |
| 17 | } |
| 18 | } |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 19 | TEST_END |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 20 | |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 21 | TEST_BEGIN(test_bitmap_init) |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 22 | { |
| 23 | size_t i; |
| 24 | |
Jason Evans | f97e5ac | 2014-09-28 14:43:11 -0700 | [diff] [blame] | 25 | for (i = 1; i <= BITMAP_MAXBITS; i++) { |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 26 | bitmap_info_t binfo; |
| 27 | bitmap_info_init(&binfo, i); |
| 28 | { |
| 29 | size_t j; |
Christopher Ferris | e429403 | 2016-03-02 14:33:02 -0800 | [diff] [blame] | 30 | bitmap_t *bitmap = (bitmap_t *)malloc( |
| 31 | bitmap_size(&binfo)); |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 32 | bitmap_init(bitmap, &binfo); |
| 33 | |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 34 | for (j = 0; j < i; j++) { |
| 35 | assert_false(bitmap_get(bitmap, &binfo, j), |
| 36 | "Bit should be unset"); |
| 37 | } |
Mike Hommey | 8b49971 | 2012-04-24 23:22:02 +0200 | [diff] [blame] | 38 | free(bitmap); |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 39 | } |
| 40 | } |
| 41 | } |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 42 | TEST_END |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 43 | |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 44 | TEST_BEGIN(test_bitmap_set) |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 45 | { |
| 46 | size_t i; |
| 47 | |
Jason Evans | f97e5ac | 2014-09-28 14:43:11 -0700 | [diff] [blame] | 48 | for (i = 1; i <= BITMAP_MAXBITS; i++) { |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 49 | bitmap_info_t binfo; |
| 50 | bitmap_info_init(&binfo, i); |
| 51 | { |
| 52 | size_t j; |
Christopher Ferris | e429403 | 2016-03-02 14:33:02 -0800 | [diff] [blame] | 53 | bitmap_t *bitmap = (bitmap_t *)malloc( |
| 54 | bitmap_size(&binfo)); |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 55 | bitmap_init(bitmap, &binfo); |
| 56 | |
| 57 | for (j = 0; j < i; j++) |
| 58 | bitmap_set(bitmap, &binfo, j); |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 59 | assert_true(bitmap_full(bitmap, &binfo), |
| 60 | "All bits should be set"); |
Mike Hommey | 8b49971 | 2012-04-24 23:22:02 +0200 | [diff] [blame] | 61 | free(bitmap); |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 62 | } |
| 63 | } |
| 64 | } |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 65 | TEST_END |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 66 | |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 67 | TEST_BEGIN(test_bitmap_unset) |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 68 | { |
| 69 | size_t i; |
| 70 | |
Jason Evans | f97e5ac | 2014-09-28 14:43:11 -0700 | [diff] [blame] | 71 | for (i = 1; i <= BITMAP_MAXBITS; i++) { |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 72 | bitmap_info_t binfo; |
| 73 | bitmap_info_init(&binfo, i); |
| 74 | { |
| 75 | size_t j; |
Christopher Ferris | e429403 | 2016-03-02 14:33:02 -0800 | [diff] [blame] | 76 | bitmap_t *bitmap = (bitmap_t *)malloc( |
| 77 | bitmap_size(&binfo)); |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 78 | bitmap_init(bitmap, &binfo); |
| 79 | |
| 80 | for (j = 0; j < i; j++) |
| 81 | bitmap_set(bitmap, &binfo, j); |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 82 | assert_true(bitmap_full(bitmap, &binfo), |
| 83 | "All bits should be set"); |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 84 | 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 Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 88 | assert_true(bitmap_full(bitmap, &binfo), |
| 89 | "All bits should be set"); |
Mike Hommey | 8b49971 | 2012-04-24 23:22:02 +0200 | [diff] [blame] | 90 | free(bitmap); |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 91 | } |
| 92 | } |
| 93 | } |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 94 | TEST_END |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 95 | |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 96 | TEST_BEGIN(test_bitmap_sfu) |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 97 | { |
| 98 | size_t i; |
| 99 | |
Jason Evans | f97e5ac | 2014-09-28 14:43:11 -0700 | [diff] [blame] | 100 | for (i = 1; i <= BITMAP_MAXBITS; i++) { |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 101 | bitmap_info_t binfo; |
| 102 | bitmap_info_init(&binfo, i); |
| 103 | { |
| 104 | ssize_t j; |
Christopher Ferris | e429403 | 2016-03-02 14:33:02 -0800 | [diff] [blame] | 105 | bitmap_t *bitmap = (bitmap_t *)malloc( |
| 106 | bitmap_size(&binfo)); |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 107 | bitmap_init(bitmap, &binfo); |
| 108 | |
| 109 | /* Iteratively set bits starting at the beginning. */ |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 110 | 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 Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 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); |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 124 | assert_zd_eq(bitmap_sfu(bitmap, &binfo), j, |
| 125 | "First unset bit should the bit previously " |
| 126 | "unset"); |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 127 | bitmap_unset(bitmap, &binfo, j); |
| 128 | } |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 129 | assert_false(bitmap_get(bitmap, &binfo, 0), |
| 130 | "Bit should be unset"); |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 131 | |
| 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 Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 138 | assert_zd_eq(bitmap_sfu(bitmap, &binfo), j, |
| 139 | "First unset bit should be just after the " |
| 140 | "bit previously set"); |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 141 | bitmap_unset(bitmap, &binfo, j); |
| 142 | } |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 143 | 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 Hommey | 8b49971 | 2012-04-24 23:22:02 +0200 | [diff] [blame] | 147 | free(bitmap); |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 148 | } |
| 149 | } |
| 150 | } |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 151 | TEST_END |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 152 | |
| 153 | int |
| 154 | main(void) |
| 155 | { |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 156 | |
Jason Evans | 2a83ed0 | 2013-12-08 20:52:21 -0800 | [diff] [blame] | 157 | return (test( |
| 158 | test_bitmap_size, |
| 159 | test_bitmap_init, |
| 160 | test_bitmap_set, |
| 161 | test_bitmap_unset, |
| 162 | test_bitmap_sfu)); |
Jason Evans | 84c8eef | 2011-03-16 10:30:13 -0700 | [diff] [blame] | 163 | } |