]> git.ozlabs.org Git - ccan/blob - ccan/bitmap/test/run.c
5911a363429d204330225991af08733797aec429
[ccan] / ccan / bitmap / test / run.c
1 #include <ccan/bitmap/bitmap.h>
2 #include <ccan/tap/tap.h>
3 #include <ccan/array_size/array_size.h>
4
5 int bitmap_sizes[] = {
6         1, 2, 3, 4, 5, 6, 7, 8,
7         16, 17, 24, 32, 33,
8         64, 65, 127, 128, 129,
9         1023, 1024, 1025,
10 };
11 #define NSIZES ARRAY_SIZE(bitmap_sizes)
12 #define NTESTS 9
13
14 static void test_sizes(int nbits)
15 {
16         bitmap *bitmap = bitmap_alloc(nbits);
17         int i, j;
18         bool wrong;
19
20         ok1(bitmap != NULL);
21
22         bitmap_zero(bitmap, nbits);
23         wrong = false;
24         for (i = 0; i < nbits; i++) {
25                 wrong = wrong || bitmap_test_bit(bitmap, i);
26         }
27         ok1(!wrong);
28
29         bitmap_fill(bitmap, nbits);
30         wrong = false;
31         for (i = 0; i < nbits; i++) {
32                 wrong = wrong || !bitmap_test_bit(bitmap, i);
33         }
34         ok1(!wrong);
35
36         wrong = false;
37         for (i = 0; i < nbits; i++) {
38                 bitmap_zero(bitmap, nbits);
39                 bitmap_set_bit(bitmap, i);
40                 for (j = 0; j < nbits; j++) {
41                         bool val = (i == j);
42
43                         wrong = wrong || (bitmap_test_bit(bitmap, j) != val);
44                 }
45         }
46         ok1(!wrong);
47
48         wrong = false;
49         for (i = 0; i < nbits; i++) {
50                 bitmap_fill(bitmap, nbits);
51                 bitmap_clear_bit(bitmap, i);
52                 for (j = 0; j < nbits; j++) {
53                         bool val = !(i == j);
54
55                         wrong = wrong || (bitmap_test_bit(bitmap, j) != val);
56                 }
57         }
58         ok1(!wrong);
59
60         bitmap_zero(bitmap, nbits);
61         ok1(bitmap_empty(bitmap, nbits));
62
63         wrong = false;
64         for (i = 0; i < nbits; i++) {
65                 bitmap_zero(bitmap, nbits);
66                 bitmap_set_bit(bitmap, i);
67                 wrong = wrong || bitmap_empty(bitmap, nbits);
68         }
69         ok1(!wrong);
70
71         bitmap_fill(bitmap, nbits);
72         ok1(bitmap_full(bitmap, nbits));
73
74         wrong = false;
75         for (i = 0; i < nbits; i++) {
76                 bitmap_fill(bitmap, nbits);
77                 bitmap_clear_bit(bitmap, i);
78                 wrong = wrong || bitmap_full(bitmap, nbits);
79         }
80         ok1(!wrong);
81                 
82         free(bitmap);
83 }
84
85 int main(void)
86 {
87         int i;
88
89         /* This is how many tests you plan to run */
90         plan_tests(NSIZES * NTESTS);
91
92         for (i = 0; i < NSIZES; i++) {
93                 diag("Testing %d-bit bitmap", bitmap_sizes[i]);
94                 test_sizes(bitmap_sizes[i]);
95         }
96
97         /* This exits depending on whether all tests passed */
98         return exit_status();
99 }