libaura: More tests for dicts, duplicate handling
[dragonfly.git] / tools / regression / usr.sbin / installer / libaura / dict3 / dict3.c
1 #include <assert.h>
2 #include <stdio.h>
3 #include <dict.h>
4 #include <string.h>
5
6 const int methods[3] = {
7         AURA_DICT_HASH,
8         AURA_DICT_LIST,
9         AURA_DICT_SORTED_LIST
10 };
11
12 const char *key = "key";
13
14 static struct aura_dict *
15 dict_create(int method)
16 {
17         struct aura_dict *d;
18         char *first, *second;
19
20         first = malloc(16);
21         second = malloc(16);
22
23         d = aura_dict_new(2, method);
24
25         snprintf(first, strlen("first") + 1, "%s", "first");
26         snprintf(second, strlen("second") + 1, "%s", "second");
27
28         aura_dict_store(d, key, strlen(key), first, strlen("first") + 1);
29         aura_dict_store(d, key, strlen(key), second, strlen("second") + 1);
30
31         return d;
32 }
33
34 int
35 main(void)
36 {
37         struct aura_dict *d;
38
39         for (int i = 1; i <= 3; i++) {
40                 char *v;
41                 size_t len = 0;
42
43                 d = dict_create(i);
44
45                 aura_dict_fetch(d, "key", strlen("key"), (void **)&v, &len);
46                 if (!strcmp("second", v) == 0) {
47                         fprintf(stderr,
48                             "aura_dict_store did not handle duplicates\n");
49                         return 1;
50                 }
51         }
52
53         return 0;
54 }