/[LeafOK_CVS]/lbbs/src/test_trie_dict.c
ViewVC logotype

Contents of /lbbs/src/test_trie_dict.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show annotations)
Fri May 16 04:54:35 2025 UTC (10 months ago) by sysadm
Branch: MAIN
Changes since 1.1: +9 -0 lines
Content type: text/x-csrc
Add trie_dict_traverse to trie_dict

1 /***************************************************************************
2 test_trie_dict.c - description
3 -------------------
4 Copyright : (C) 2004-2025 by Leaflet
5 Email : leaflet@leafok.com
6 ***************************************************************************/
7
8 /***************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 3 of the License, or *
13 * (at your option) any later version. *
14 * *
15 ***************************************************************************/
16
17 #include "trie_dict.h"
18 #include <stdio.h>
19
20 #define TEST_VAL ((int64_t)(0xcb429a63a017661f)) // int64_t
21
22 const char *keys[] = {
23 "ABCDEFG",
24 "abcdefg",
25 "1234567890",
26 "P3p4P3z4P_",
27 "_bbBBz_Z_",
28 ""};
29
30 int keys_cnt = 6;
31
32 void test_traverse_cb(const char * key, int64_t value)
33 {
34 printf("Traverse key: %s\n", key);
35 }
36
37 int main(int argc, char *argv[])
38 {
39 TRIE_NODE *p_dict;
40 int ret;
41 int64_t value;
42
43 p_dict = trie_dict_create();
44
45 if (p_dict == NULL)
46 {
47 printf("OOM\n");
48 return -1;
49 }
50
51 ret = trie_dict_set(p_dict, NULL, TEST_VAL);
52 if (ret != -1)
53 {
54 printf("Set NULL key error (%d)\n", ret);
55 }
56
57 ret = trie_dict_del(p_dict, NULL);
58 if (ret != -1)
59 {
60 printf("Del NULL key error (%d)\n", ret);
61 }
62
63 for (int i = 0; i < keys_cnt; i++)
64 {
65 ret = trie_dict_set(p_dict, keys[i], TEST_VAL >> i);
66 if (ret != 1)
67 {
68 printf("Set non-existing [%s] error (%d)\n", keys[i], ret);
69 }
70 }
71
72 for (int i = 0; i < keys_cnt; i++)
73 {
74 ret = trie_dict_get(p_dict, keys[i], &value);
75 if (ret != 1)
76 {
77 printf("Get [%s] error (%d)\n", keys[i], ret);
78 }
79 else if (value != TEST_VAL >> i)
80 {
81 printf("Value of [%s] is incorrect (%ld != %ld)\n", keys[i], value, TEST_VAL >> i);
82 }
83 }
84
85 trie_dict_traverse(p_dict, test_traverse_cb);
86
87 for (int i = 0; i < keys_cnt; i++)
88 {
89 if (i % 2 == 0)
90 {
91 ret = trie_dict_del(p_dict, keys[i]);
92 if (ret != 1)
93 {
94 printf("Del existing [%s] error (%d)\n", keys[i], ret);
95 }
96 }
97 else
98 {
99 ret = trie_dict_set(p_dict, keys[i], TEST_VAL >> i);
100 if (ret != 0)
101 {
102 printf("Set existing [%s] with the same value error (%d)\n", keys[i], ret);
103 }
104 }
105 }
106
107 for (int i = 0; i < keys_cnt; i++)
108 {
109 if (i % 2 == 0)
110 {
111 ret = trie_dict_get(p_dict, keys[i], &value);
112 if (ret != 0)
113 {
114 printf("Get non-existing [%s] error (%d)\n", keys[i], ret);
115 }
116 }
117 else
118 {
119 ret = trie_dict_get(p_dict, keys[i], &value);
120 if (ret != 1)
121 {
122 printf("Get [%s] error (%d)\n", keys[i], ret);
123 }
124 else if (value != TEST_VAL >> i)
125 {
126 printf("Value of [%s] is incorrect (%ld != %ld)\n", keys[i], value, TEST_VAL >> i);
127 }
128 }
129 }
130
131 for (int i = 0; i < keys_cnt; i++)
132 {
133 if (i % 2 == 0)
134 {
135 ret = trie_dict_del(p_dict, keys[i]);
136 if (ret != 0)
137 {
138 printf("Del non-existing [%s] error (%d)\n", keys[i], ret);
139 }
140 }
141 else
142 {
143 ret = trie_dict_set(p_dict, keys[i], TEST_VAL << i);
144 if (ret != 1)
145 {
146 printf("Set existing [%s] with different value error (%d)\n", keys[i], ret);
147 }
148 }
149 }
150
151 trie_dict_traverse(p_dict, test_traverse_cb);
152
153 for (int i = 0; i < keys_cnt; i++)
154 {
155 if (i % 2 == 0)
156 {
157 ret = trie_dict_get(p_dict, keys[i], &value);
158 if (ret != 0)
159 {
160 printf("Get non-existing [%s] error (%d)\n", keys[i], ret);
161 }
162 }
163 else
164 {
165 ret = trie_dict_get(p_dict, keys[i], &value);
166 if (ret != 1)
167 {
168 printf("Get [%s] error (%d)\n", keys[i], ret);
169 }
170 else if (value != TEST_VAL << i)
171 {
172 printf("Value of [%s] is incorrect (%ld != %ld)\n", keys[i], value, TEST_VAL << i);
173 }
174 }
175 }
176
177 trie_dict_destroy(p_dict);
178 p_dict = NULL;
179
180 printf("Done\n");
181
182 return 0;
183 }

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1