1
2 #include <winpr/crt.h>
3 #include <winpr/tchar.h>
4 #include <winpr/collections.h>
5
6 static char* key1 = "key1";
7 static char* key2 = "key2";
8 static char* key3 = "key3";
9
10 static char* val1 = "val1";
11 static char* val2 = "val2";
12 static char* val3 = "val3";
13
test_hash_table_pointer(void)14 static int test_hash_table_pointer(void)
15 {
16 int rc = -1;
17 int count;
18 char* value;
19 wHashTable* table;
20 table = HashTable_New(TRUE);
21
22 if (!table)
23 return -1;
24
25 HashTable_Add(table, key1, val1);
26 HashTable_Add(table, key2, val2);
27 HashTable_Add(table, key3, val3);
28 count = HashTable_Count(table);
29
30 if (count != 3)
31 {
32 printf("HashTable_Count: Expected : 3, Actual: %d\n", count);
33 goto fail;
34 }
35
36 HashTable_Remove(table, key2);
37 count = HashTable_Count(table);
38
39 if (count != 2)
40 {
41 printf("HashTable_Count: Expected : 2, Actual: %d\n", count);
42 goto fail;
43 }
44
45 HashTable_Remove(table, key3);
46 count = HashTable_Count(table);
47
48 if (count != 1)
49 {
50 printf("HashTable_Count: Expected : 1, Actual: %d\n", count);
51 goto fail;
52 }
53
54 HashTable_Remove(table, key1);
55 count = HashTable_Count(table);
56
57 if (count != 0)
58 {
59 printf("HashTable_Count: Expected : 0, Actual: %d\n", count);
60 goto fail;
61 }
62
63 HashTable_Add(table, key1, val1);
64 HashTable_Add(table, key2, val2);
65 HashTable_Add(table, key3, val3);
66 count = HashTable_Count(table);
67
68 if (count != 3)
69 {
70 printf("HashTable_Count: Expected : 3, Actual: %d\n", count);
71 goto fail;
72 }
73
74 value = (char*)HashTable_GetItemValue(table, key1);
75
76 if (strcmp(value, val1) != 0)
77 {
78 printf("HashTable_GetItemValue: Expected : %s, Actual: %s\n", val1, value);
79 goto fail;
80 }
81
82 value = (char*)HashTable_GetItemValue(table, key2);
83
84 if (strcmp(value, val2) != 0)
85 {
86 printf("HashTable_GetItemValue: Expected : %s, Actual: %s\n", val2, value);
87 goto fail;
88 }
89
90 value = (char*)HashTable_GetItemValue(table, key3);
91
92 if (strcmp(value, val3) != 0)
93 {
94 printf("HashTable_GetItemValue: Expected : %s, Actual: %s\n", val3, value);
95 goto fail;
96 }
97
98 HashTable_SetItemValue(table, key2, "apple");
99 value = (char*)HashTable_GetItemValue(table, key2);
100
101 if (strcmp(value, "apple") != 0)
102 {
103 printf("HashTable_GetItemValue: Expected : %s, Actual: %s\n", "apple", value);
104 goto fail;
105 }
106
107 if (!HashTable_Contains(table, key2))
108 {
109 printf("HashTable_Contains: Expected : TRUE, Actual: FALSE\n");
110 goto fail;
111 }
112
113 if (!HashTable_Remove(table, key2))
114 {
115 printf("HashTable_Remove: Expected : TRUE, Actual: FALSE\n");
116 goto fail;
117 }
118
119 if (HashTable_Remove(table, key2))
120 {
121 printf("HashTable_Remove: Expected : FALSE, Actual: TRUE\n");
122 goto fail;
123 }
124
125 HashTable_Clear(table);
126 count = HashTable_Count(table);
127
128 if (count != 0)
129 {
130 printf("HashTable_Count: Expected : 0, Actual: %d\n", count);
131 goto fail;
132 }
133
134 rc = 1;
135 fail:
136 HashTable_Free(table);
137 return rc;
138 }
139
test_hash_table_string(void)140 static int test_hash_table_string(void)
141 {
142 int rc = -1;
143 int count;
144 char* value;
145 wHashTable* table;
146 table = HashTable_New(TRUE);
147
148 if (!table)
149 return -1;
150
151 table->hash = HashTable_StringHash;
152 table->keyCompare = HashTable_StringCompare;
153 table->valueCompare = HashTable_StringCompare;
154 table->keyClone = HashTable_StringClone;
155 table->valueClone = HashTable_StringClone;
156 table->keyFree = HashTable_StringFree;
157 table->valueFree = HashTable_StringFree;
158 HashTable_Add(table, key1, val1);
159 HashTable_Add(table, key2, val2);
160 HashTable_Add(table, key3, val3);
161 count = HashTable_Count(table);
162
163 if (count != 3)
164 {
165 printf("HashTable_Count: Expected : 3, Actual: %d\n", count);
166 goto fail;
167 }
168
169 HashTable_Remove(table, key2);
170 count = HashTable_Count(table);
171
172 if (count != 2)
173 {
174 printf("HashTable_Count: Expected : 3, Actual: %d\n", count);
175 goto fail;
176 }
177
178 HashTable_Remove(table, key3);
179 count = HashTable_Count(table);
180
181 if (count != 1)
182 {
183 printf("HashTable_Count: Expected : 1, Actual: %d\n", count);
184 goto fail;
185 }
186
187 HashTable_Remove(table, key1);
188 count = HashTable_Count(table);
189
190 if (count != 0)
191 {
192 printf("HashTable_Count: Expected : 0, Actual: %d\n", count);
193 goto fail;
194 }
195
196 HashTable_Add(table, key1, val1);
197 HashTable_Add(table, key2, val2);
198 HashTable_Add(table, key3, val3);
199 count = HashTable_Count(table);
200
201 if (count != 3)
202 {
203 printf("HashTable_Count: Expected : 3, Actual: %d\n", count);
204 goto fail;
205 }
206
207 value = (char*)HashTable_GetItemValue(table, key1);
208
209 if (strcmp(value, val1) != 0)
210 {
211 printf("HashTable_GetItemValue: Expected : %s, Actual: %s\n", val1, value);
212 goto fail;
213 }
214
215 value = (char*)HashTable_GetItemValue(table, key2);
216
217 if (strcmp(value, val2) != 0)
218 {
219 printf("HashTable_GetItemValue: Expected : %s, Actual: %s\n", val2, value);
220 goto fail;
221 }
222
223 value = (char*)HashTable_GetItemValue(table, key3);
224
225 if (strcmp(value, val3) != 0)
226 {
227 printf("HashTable_GetItemValue: Expected : %s, Actual: %s\n", val3, value);
228 goto fail;
229 }
230
231 HashTable_SetItemValue(table, key2, "apple");
232 value = (char*)HashTable_GetItemValue(table, key2);
233
234 if (strcmp(value, "apple") != 0)
235 {
236 printf("HashTable_GetItemValue: Expected : %s, Actual: %s\n", "apple", value);
237 goto fail;
238 }
239
240 if (!HashTable_Contains(table, key2))
241 {
242 printf("HashTable_Contains: Expected : TRUE, Actual: FALSE\n");
243 goto fail;
244 }
245
246 if (!HashTable_Remove(table, key2))
247 {
248 printf("HashTable_Remove: Expected : TRUE, Actual: FALSE\n");
249 goto fail;
250 }
251
252 if (HashTable_Remove(table, key2))
253 {
254 printf("HashTable_Remove: Expected : FALSE, Actual: TRUE\n");
255 goto fail;
256 }
257
258 HashTable_Clear(table);
259 count = HashTable_Count(table);
260
261 if (count != 0)
262 {
263 printf("HashTable_Count: Expected : 0, Actual: %d\n", count);
264 goto fail;
265 }
266
267 rc = 1;
268 fail:
269 HashTable_Free(table);
270 return rc;
271 }
272
TestHashTable(int argc,char * argv[])273 int TestHashTable(int argc, char* argv[])
274 {
275 if (test_hash_table_pointer() < 0)
276 return 1;
277
278 if (test_hash_table_string() < 0)
279 return 1;
280
281 return 0;
282 }
283