Bump copyright year
[idzebra-moved-to-github.git] / util / test_strmap.c
1 /* This file is part of the Zebra server.
2    Copyright (C) 2004-2013 Index Data
3
4 Zebra is free software; you can redistribute it and/or modify it under
5 the terms of the GNU General Public License as published by the Free
6 Software Foundation; either version 2, or (at your option) any later
7 version.
8
9 Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17
18 */
19
20 #if HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23 #include <zebra_strmap.h>
24 #include <yaz/test.h>
25 #include <string.h>
26 #include <stdlib.h>
27
28 static void test1(void)
29 {
30     {
31         zebra_strmap_t sm = zebra_strmap_create();
32         YAZ_CHECK(sm);
33         zebra_strmap_destroy(sm);
34     }
35     {
36         int v = 1;
37         void *data_buf;
38         size_t data_len;
39         zebra_strmap_t sm = zebra_strmap_create();
40         YAZ_CHECK(!zebra_strmap_lookup(sm, "a", 0, 0));
41
42         zebra_strmap_add(sm, "a", &v, sizeof v);
43         data_buf = zebra_strmap_lookup(sm, "a", 0, &data_len);
44         YAZ_CHECK(data_buf && data_len == sizeof v
45                   && v == *((int*) data_buf));
46
47         zebra_strmap_remove(sm, "a");
48         data_buf = zebra_strmap_lookup(sm, "a", 0, &data_len);
49         YAZ_CHECK(data_buf == 0);
50
51         v = 1;
52         zebra_strmap_add(sm, "a", &v, sizeof v);
53
54         v = 2;
55         zebra_strmap_add(sm, "b", &v, sizeof v);
56
57         v = 3;
58         zebra_strmap_add(sm, "c", &v, sizeof v);
59
60         {
61             zebra_strmap_it it = zebra_strmap_it_create(sm);
62             const char *name;
63             int no = 0;
64             while ((name = zebra_strmap_it_next(it, &data_buf, &data_len)))
65             {
66                 YAZ_CHECK(!strcmp(name, "a") || !strcmp(name, "b") ||
67                           !strcmp(name, "c"));
68                 no++;
69             }
70             YAZ_CHECK_EQ(no, 3);
71             zebra_strmap_it_destroy(it);
72         }
73         zebra_strmap_destroy(sm);
74     }
75 }
76
77 static void test2(int no_iter)
78 {
79     zebra_strmap_t sm = zebra_strmap_create();
80     {
81         int i;
82         srand(12);
83         for (i = 0; i < no_iter; i++)
84         {
85             char str[8];
86             int j;
87             int v = i;
88
89             for (j = 0; j < sizeof(str)-1; j++)
90                 str[j] = rand() & 255;
91             str[j] = '\0';
92
93             zebra_strmap_add(sm, str, &v, sizeof v);
94         }
95     }
96     {
97         int failed = 0;
98         int i;
99         srand(12);
100         for (i = 0; i < no_iter; i++)
101         {
102             char str[8];
103             int j;
104             int v = i;
105             void *data_buf;
106             size_t data_len;
107
108             for (j = 0; j < sizeof(str)-1; j++)
109                 str[j] = rand() & 255;
110             str[j] = '\0';
111
112             j = 0;
113             while ((data_buf = zebra_strmap_lookup(sm, str, j, &data_len)))
114             {
115                 if (data_len == sizeof v && v == *((int*) data_buf))
116                     break;
117                 j++;
118             }
119             if (!(data_buf && data_len == sizeof v
120                   && v == *((int*) data_buf)))
121                 failed++;
122         }
123         if (failed)
124             YAZ_CHECK_EQ(failed, 0);
125     }
126     zebra_strmap_destroy(sm);
127 }
128
129 int main (int argc, char **argv)
130 {
131     YAZ_CHECK_INIT(argc, argv);
132     YAZ_CHECK_LOG();
133     test1();
134     test2(50000);
135     YAZ_CHECK_TERM;
136 }
137 /*
138  * Local variables:
139  * c-basic-offset: 4
140  * c-file-style: "Stroustrup"
141  * indent-tabs-mode: nil
142  * End:
143  * vim: shiftwidth=4 tabstop=8 expandtab
144  */
145