Branch data Line data Source code
1 : : // SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
2 : : /*
3 : : * Copyright 2016-2017 IBM Corp.
4 : : */
5 : :
6 : : #include <buddy.h>
7 : : #include <assert.h>
8 : : #include <stdlib.h>
9 : : #include <stdio.h>
10 : :
11 : 1 : static void *zalloc(size_t size)
12 : : {
13 : 1 : return calloc(size, 1);
14 : : }
15 : :
16 : : #include "../buddy.c"
17 : : #include "../bitmap.c"
18 : :
19 : : #define BUDDY_ORDER 8
20 : :
21 : 1 : int main(void)
22 : : {
23 : : struct buddy *b;
24 : : int i, a[10];
25 : :
26 : 1 : b = buddy_create(BUDDY_ORDER);
27 : 1 : assert(b);
28 : :
29 : 1 : buddy_reserve(b, 127, 0);
30 : 1 : buddy_reserve(b, 0, 4);
31 : 1 : assert(buddy_reserve(b, 0, 4) == false);
32 : :
33 : 1 : a[0] = buddy_alloc(b, 0);
34 : 1 : assert(a[0] >= 0);
35 : 1 : a[1] = buddy_alloc(b, 0);
36 : 1 : assert(a[1] >= 0);
37 : 1 : a[2] = buddy_alloc(b, 3);
38 : 1 : assert(a[2] >= 0);
39 : 1 : a[3] = buddy_alloc(b, 4);
40 : 1 : assert(a[3] >= 0);
41 : 1 : a[4] = buddy_alloc(b, 5);
42 : 1 : assert(a[4] >= 0);
43 : 1 : a[5] = buddy_alloc(b, 4);
44 : 1 : assert(a[5] >= 0);
45 : 1 : a[6] = buddy_alloc(b, 3);
46 : 1 : assert(a[6] >= 0);
47 : 1 : a[7] = buddy_alloc(b, 2);
48 : 1 : assert(a[7] >= 0);
49 : 1 : a[8] = buddy_alloc(b, 1);
50 : 1 : assert(a[8] >= 0);
51 : 1 : a[9] = buddy_alloc(b, 8);
52 : 1 : assert(a[9] < 0);
53 : :
54 : 1 : buddy_free(b, a[0], 0);
55 : 1 : buddy_free(b, a[8], 1);
56 : 1 : buddy_free(b, a[1], 0);
57 : 1 : buddy_free(b, a[7], 2);
58 : 1 : buddy_free(b, a[2], 3);
59 : 1 : buddy_free(b, a[6], 3);
60 : 1 : buddy_free(b, a[3], 4);
61 : 1 : buddy_free(b, a[5], 4);
62 : 1 : buddy_free(b, a[4], 5);
63 : :
64 : 1 : buddy_free(b, 127, 0);
65 : 1 : buddy_free(b, 0, 4);
66 : :
67 : 511 : for (i = 2; i < buddy_map_size(b); i++)
68 : 510 : assert(bitmap_tst_bit(b->map, i));
69 : 1 : assert(!bitmap_tst_bit(b->map, 1));
70 : :
71 : 1 : buddy_destroy(b);
72 : 1 : return 0;
73 : : }
|