1 #include <assert.h>
2 #include <stdio.h>
3 #include <dict.h>
4 #include <string.h>
5 
6 #define ELEMS	16
7 
8 /* Make starwars fans happy */
9 const char keys[][16] = {
10 	"It",
11 	"is",
12 	"a",
13 	"period",
14 	"of",
15 	"civil",
16 	"war.",
17 	"Rebel",
18 	"spaceships,",
19 	"striking",
20 	"from a",
21 	"hidden",
22 	"base,",
23 	"have",
24 	"won",
25 	"their..."
26 };
27 
28 int values[16];
29 
30 const int methods[3] = {
31 	AURA_DICT_HASH,
32 	AURA_DICT_LIST,
33 	AURA_DICT_SORTED_LIST
34 };
35 
36 const char *
37 m2s(int method)
38 {
39 	switch(method) {
40 	case AURA_DICT_HASH:
41 		return "hash";
42 		break;	/* NOTREACHED */
43 	case AURA_DICT_LIST:
44 		return "list";
45 		break;	/* NOTREACHED */
46 	case AURA_DICT_SORTED_LIST:
47 		return "sorted_list";
48 		break;	/* NOTREACHED */
49 	default:
50 		return NULL;
51 		break;	/* NOTREACHED */
52 	}
53 }
54 
55 static struct aura_dict *
56 test_store(int method)
57 {
58 	struct aura_dict *d;
59 
60 	d = aura_dict_new(ELEMS, method);
61 	for (int i = 0; i < ELEMS; i++) {
62 		values[i] = i;
63 		aura_dict_store(d, keys[i], strlen(keys[i]),
64 		    &values[i], sizeof(int));
65 		printf("%s_store: %s=>%d\n",
66 		    m2s(method), keys[i], values[i]);
67 	}
68 	return d;
69 }
70 
71 static int
72 test_fetch(struct aura_dict *d, int method)
73 {
74 	if (d == NULL)
75 		return -1;
76 
77 	aura_dict_rewind(d);
78 	for (int i = 0; i < ELEMS; i++) {
79 		int *val = malloc(sizeof(int));
80 		size_t len = sizeof(int);
81 		aura_dict_fetch(d, keys[i], strlen(keys[i]),
82 		    (void *)&val, &len);
83 		if (*val != values[i]) {
84 			fprintf(stderr,
85 			    "mismatch *val=%d values[%d]=%d\n",
86 			    *val, i, values[i]);
87 			return -1;
88 		}
89 		printf("%s_fetch: %s=>%d\n", m2s(method), keys[i], *val);
90 		free(val);
91 	}
92 	aura_dict_free(d);
93 
94 	return 0;
95 }
96 
97 int
98 main(void)
99 {
100 	struct aura_dict *d;
101 
102 	for (int i = 1; i <= 3; i++) {
103 		d = test_store(i);
104 
105 		if ((test_fetch(d, i)) == -1) {
106 			return 1;
107 		}
108 	}
109 
110 	return 0;
111 }
112