/[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.1 - (hide 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 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     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