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