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