/[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.1 - (show annotations)
Wed May 14 04:21:41 2025 UTC (10 months ago) by sysadm
Branch: MAIN
Content type: text/x-csrc
Add 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 int main(int argc, char *argv[])
33 {
34 TRIE_NODE *p_dict;
35 int ret;
36 int64_t value;
37
38 p_dict = trie_dict_create();
39
40 if (p_dict == NULL)
41 {
42 printf("OOM\n");
43 return -1;
44 }
45
46 ret = trie_dict_set(p_dict, NULL, TEST_VAL);
47 if (ret != -1)
48 {
49 printf("Set NULL key error (%d)\n", ret);
50 }
51
52 ret = trie_dict_del(p_dict, NULL);
53 if (ret != -1)
54 {
55 printf("Del NULL key error (%d)\n", ret);
56 }
57
58 for (int i = 0; i < keys_cnt; i++)
59 {
60 ret = trie_dict_set(p_dict, keys[i], TEST_VAL >> i);
61 if (ret != 1)
62 {
63 printf("Set non-existing [%s] error (%d)\n", keys[i], ret);
64 }
65 }
66
67 for (int i = 0; i < keys_cnt; i++)
68 {
69 ret = trie_dict_get(p_dict, keys[i], &value);
70 if (ret != 1)
71 {
72 printf("Get [%s] error (%d)\n", keys[i], ret);
73 }
74 else if (value != TEST_VAL >> i)
75 {
76 printf("Value of [%s] is incorrect (%ld != %ld)\n", keys[i], value, TEST_VAL >> i);
77 }
78 }
79
80 for (int i = 0; i < keys_cnt; i++)
81 {
82 if (i % 2 == 0)
83 {
84 ret = trie_dict_del(p_dict, keys[i]);
85 if (ret != 1)
86 {
87 printf("Del existing [%s] error (%d)\n", keys[i], ret);
88 }
89 }
90 else
91 {
92 ret = trie_dict_set(p_dict, keys[i], TEST_VAL >> i);
93 if (ret != 0)
94 {
95 printf("Set existing [%s] with the same value error (%d)\n", keys[i], ret);
96 }
97 }
98 }
99
100 for (int i = 0; i < keys_cnt; i++)
101 {
102 if (i % 2 == 0)
103 {
104 ret = trie_dict_get(p_dict, keys[i], &value);
105 if (ret != 0)
106 {
107 printf("Get non-existing [%s] error (%d)\n", keys[i], ret);
108 }
109 }
110 else
111 {
112 ret = trie_dict_get(p_dict, keys[i], &value);
113 if (ret != 1)
114 {
115 printf("Get [%s] error (%d)\n", keys[i], ret);
116 }
117 else if (value != TEST_VAL >> i)
118 {
119 printf("Value of [%s] is incorrect (%ld != %ld)\n", keys[i], value, TEST_VAL >> i);
120 }
121 }
122 }
123
124 for (int i = 0; i < keys_cnt; i++)
125 {
126 if (i % 2 == 0)
127 {
128 ret = trie_dict_del(p_dict, keys[i]);
129 if (ret != 0)
130 {
131 printf("Del non-existing [%s] error (%d)\n", keys[i], ret);
132 }
133 }
134 else
135 {
136 ret = trie_dict_set(p_dict, keys[i], TEST_VAL << i);
137 if (ret != 1)
138 {
139 printf("Set existing [%s] with different value error (%d)\n", keys[i], ret);
140 }
141 }
142 }
143
144 for (int i = 0; i < keys_cnt; i++)
145 {
146 if (i % 2 == 0)
147 {
148 ret = trie_dict_get(p_dict, keys[i], &value);
149 if (ret != 0)
150 {
151 printf("Get non-existing [%s] error (%d)\n", keys[i], ret);
152 }
153 }
154 else
155 {
156 ret = trie_dict_get(p_dict, keys[i], &value);
157 if (ret != 1)
158 {
159 printf("Get [%s] error (%d)\n", keys[i], ret);
160 }
161 else if (value != TEST_VAL << i)
162 {
163 printf("Value of [%s] is incorrect (%ld != %ld)\n", keys[i], value, TEST_VAL << i);
164 }
165 }
166 }
167
168 trie_dict_destroy(p_dict);
169 p_dict = NULL;
170
171 printf("Done\n");
172
173 return 0;
174 }

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