1 #include "common.h"
2 #include "mba/suba.h"
3 #include "mba/varray.h"
4
5 struct foo {
6 int val;
7 char c;
8 unsigned long l;
9 };
10
11 /*
12 267 -> 999
13 50 -> 55555
14 15050 -> 7777
15 */
16
17 int
runnit(struct varray * va,int verbose)18 runnit(struct varray *va, int verbose)
19 {
20 struct foo *foo;
21 iter_t iter;
22 int i;
23
24 if ((foo = varray_get(va, 267)) == NULL) {
25 MMNO(errno);
26 return -1;
27 }
28 foo->val = 999;
29 if ((i = varray_index(va, foo)) != 267) {
30 PMSG("index!=267: %d", i);
31 return -1;
32 }
33 foo = varray_get(va, 50);
34 foo->val = 55555;
35 if ((i = varray_index(va, foo)) != 50) {
36 PMSG("index!=50: %d", i);
37 return -1;
38 }
39 foo = varray_get(va, 15050);
40 foo->l = 7777;
41 if ((i = varray_index(va, foo)) != 15050) {
42 PMSG("index!=15050: %d", i);
43 return -1;
44 }
45 varray_release(va, 300);
46
47 varray_iterate(va, &iter);
48 while ((foo = varray_next(va, &iter)) != NULL) {
49 tcase_printf(verbose, " %d", foo->val);
50 if (foo->val == 55555) {
51 break;
52 }
53 }
54 if (foo == NULL || foo->val != 55555) {
55 PMNO(errno);
56 return -1;
57 }
58 while ((foo = varray_next(va, &iter)) != NULL) {
59 tcase_printf(verbose, " %d", foo->val);
60 if (foo->val == 999) {
61 break;
62 }
63 }
64 if (foo == NULL || foo->val != 999) {
65 PMNO(errno);
66 return -1;
67 }
68 while ((foo = varray_next(va, &iter)) != NULL) {
69 tcase_printf(verbose, " %d", foo->val);
70 if (foo->val) {
71 break;
72 }
73 }
74 if (foo != NULL) {
75 MMSG("foo->val=%d", foo->val);
76 return -1;
77 }
78
79 return 0;
80 }
81 int
VarrayOps(int verbose,struct cfg * cfg,char * args[])82 VarrayOps(int verbose, struct cfg *cfg, char *args[])
83 {
84 unsigned char mem[0x2FFFF];
85 struct allocator *al = suba_init(mem, 0x2FFFF, 1, 0);
86 struct varray va1;
87 struct varray *va2;
88
89 cfg = NULL; args[0] = NULL;
90
91 if (varray_init(&va1, sizeof(struct foo), al) == -1 ||
92 runnit(&va1, verbose) == -1 ||
93 varray_deinit(&va1) == -1) {
94 MMNO(errno);
95 return -1;
96 }
97
98 if ((va2 = varray_new(sizeof(struct foo), NULL)) == NULL ||
99 runnit(va2, verbose) == -1 ||
100 varray_del(va2) == -1) {
101 MMNO(errno);
102 return -1;
103 }
104
105 tcase_printf(verbose, "\ndone\n");
106
107 return 0;
108 }
109