]>
Commit | Line | Data |
---|---|---|
db9ecf05 | 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
5ffa42cb TG |
2 | |
3 | #include "bitmap.h" | |
965040d8 | 4 | #include "tests.h" |
5ffa42cb TG |
5 | |
6 | int main(int argc, const char *argv[]) { | |
d5fa8199 | 7 | _cleanup_bitmap_free_ Bitmap *b = NULL, *b2 = NULL; |
f5fbe71d | 8 | unsigned n = UINT_MAX, i = 0; |
5ffa42cb | 9 | |
965040d8 YW |
10 | test_setup_logging(LOG_DEBUG); |
11 | ||
5ffa42cb TG |
12 | b = bitmap_new(); |
13 | assert_se(b); | |
14 | ||
f9d273e6 | 15 | ASSERT_EQ(bitmap_ensure_allocated(&b), 0); |
39dcab90 | 16 | b = bitmap_free(b); |
f9d273e6 | 17 | ASSERT_EQ(bitmap_ensure_allocated(&b), 0); |
5ffa42cb | 18 | |
f9d273e6 UA |
19 | ASSERT_FALSE(bitmap_isset(b, 0)); |
20 | ASSERT_FALSE(bitmap_isset(b, 1)); | |
21 | ASSERT_FALSE(bitmap_isset(b, 256)); | |
22 | ASSERT_TRUE(bitmap_isclear(b)); | |
5ffa42cb | 23 | |
f9d273e6 UA |
24 | ASSERT_EQ(bitmap_set(b, 0), 0); |
25 | ASSERT_TRUE(bitmap_isset(b, 0)); | |
26 | ASSERT_FALSE(bitmap_isclear(b)); | |
5ffa42cb | 27 | bitmap_unset(b, 0); |
f9d273e6 UA |
28 | ASSERT_FALSE(bitmap_isset(b, 0)); |
29 | ASSERT_TRUE(bitmap_isclear(b)); | |
5ffa42cb | 30 | |
f9d273e6 UA |
31 | ASSERT_EQ(bitmap_set(b, 1), 0); |
32 | ASSERT_TRUE(bitmap_isset(b, 1)); | |
33 | ASSERT_FALSE(bitmap_isclear(b)); | |
5ffa42cb | 34 | bitmap_unset(b, 1); |
f9d273e6 UA |
35 | ASSERT_FALSE(bitmap_isset(b, 1)); |
36 | ASSERT_TRUE(bitmap_isclear(b)); | |
5ffa42cb | 37 | |
f9d273e6 UA |
38 | ASSERT_EQ(bitmap_set(b, 256), 0); |
39 | ASSERT_TRUE(bitmap_isset(b, 256)); | |
40 | ASSERT_FALSE(bitmap_isclear(b)); | |
5ffa42cb | 41 | bitmap_unset(b, 256); |
f9d273e6 UA |
42 | ASSERT_FALSE(bitmap_isset(b, 256)); |
43 | ASSERT_TRUE(bitmap_isclear(b)); | |
5ffa42cb | 44 | |
f9d273e6 | 45 | ASSERT_EQ(bitmap_set(b, 32), 0); |
cdf6f5ae | 46 | bitmap_unset(b, 0); |
f9d273e6 | 47 | ASSERT_TRUE(bitmap_isset(b, 32)); |
cdf6f5ae TG |
48 | bitmap_unset(b, 32); |
49 | ||
90e74a66 | 50 | BITMAP_FOREACH(n, NULL) |
04499a70 | 51 | assert_not_reached(); |
cdf6f5ae | 52 | |
f9d273e6 UA |
53 | ASSERT_EQ(bitmap_set(b, 0), 0); |
54 | ASSERT_EQ(bitmap_set(b, 1), 0); | |
55 | ASSERT_EQ(bitmap_set(b, 256), 0); | |
5ffa42cb | 56 | |
90e74a66 | 57 | BITMAP_FOREACH(n, b) { |
f9d273e6 | 58 | ASSERT_EQ(n, i); |
5ffa42cb TG |
59 | if (i == 0) |
60 | i = 1; | |
61 | else if (i == 1) | |
62 | i = 256; | |
63 | else if (i == 256) | |
f5fbe71d | 64 | i = UINT_MAX; |
5ffa42cb TG |
65 | } |
66 | ||
f9d273e6 | 67 | ASSERT_EQ(i, UINT_MAX); |
5ffa42cb TG |
68 | |
69 | i = 0; | |
70 | ||
90e74a66 | 71 | BITMAP_FOREACH(n, b) { |
f9d273e6 | 72 | ASSERT_EQ(n, i); |
5ffa42cb TG |
73 | if (i == 0) |
74 | i = 1; | |
75 | else if (i == 1) | |
76 | i = 256; | |
77 | else if (i == 256) | |
f5fbe71d | 78 | i = UINT_MAX; |
5ffa42cb TG |
79 | } |
80 | ||
f9d273e6 | 81 | ASSERT_EQ(i, UINT_MAX); |
5ffa42cb | 82 | |
6b86b9e6 YW |
83 | b2 = bitmap_copy(b); |
84 | assert_se(b2); | |
f9d273e6 UA |
85 | ASSERT_TRUE(bitmap_equal(b, b2)); |
86 | ASSERT_TRUE(bitmap_equal(b, b)); | |
87 | ASSERT_FALSE(bitmap_equal(b, NULL)); | |
88 | ASSERT_FALSE(bitmap_equal(NULL, b)); | |
89 | ASSERT_TRUE(bitmap_equal(NULL, NULL)); | |
6b86b9e6 | 90 | |
5ffa42cb | 91 | bitmap_clear(b); |
f9d273e6 UA |
92 | ASSERT_TRUE(bitmap_isclear(b)); |
93 | ASSERT_FALSE(bitmap_equal(b, b2)); | |
39dcab90 | 94 | b2 = bitmap_free(b2); |
5ffa42cb | 95 | |
f5fbe71d | 96 | assert_se(bitmap_set(b, UINT_MAX) == -ERANGE); |
5ffa42cb | 97 | |
39dcab90 | 98 | b = bitmap_free(b); |
f9d273e6 UA |
99 | ASSERT_EQ(bitmap_ensure_allocated(&b), 0); |
100 | ASSERT_EQ(bitmap_ensure_allocated(&b2), 0); | |
d5fa8199 MM |
101 | |
102 | assert_se(bitmap_equal(b, b2)); | |
f9d273e6 | 103 | ASSERT_EQ(bitmap_set(b, 0), 0); |
d5fa8199 MM |
104 | bitmap_unset(b, 0); |
105 | assert_se(bitmap_equal(b, b2)); | |
106 | ||
f9d273e6 | 107 | ASSERT_EQ(bitmap_set(b, 1), 0); |
951c3eef MM |
108 | bitmap_clear(b); |
109 | assert_se(bitmap_equal(b, b2)); | |
110 | ||
f9d273e6 UA |
111 | ASSERT_EQ(bitmap_set(b, 0), 0); |
112 | ASSERT_EQ(bitmap_set(b2, 0), 0); | |
951c3eef MM |
113 | assert_se(bitmap_equal(b, b2)); |
114 | ||
5ffa42cb TG |
115 | return 0; |
116 | } |