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

Annotation of /lbbs/src/test_trie_dict.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (hide 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 sysadm 1.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 sysadm 1.2 void test_traverse_cb(const char * key, int64_t value)
33     {
34     printf("Traverse key: %s\n", key);
35     }
36    
37 sysadm 1.1 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 sysadm 1.2 trie_dict_traverse(p_dict, test_traverse_cb);
86    
87 sysadm 1.1 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 sysadm 1.2 trie_dict_traverse(p_dict, test_traverse_cb);
152    
153 sysadm 1.1 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