Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
bf6afda305ba858b64c2daa5c2b60a41ac4a957d
[simgrid.git] / src / set_unit.c
1 /*******************************/
2 /* GENERATED FILE, DO NOT EDIT */
3 /*******************************/
4
5 #include <stdio.h>
6 #include "xbt.h"
7 /*******************************/
8 /* GENERATED FILE, DO NOT EDIT */
9 /*******************************/
10
11 #line 321 "xbt/set.c" 
12 #include "xbt.h"
13 #include "xbt/ex.h"
14
15
16 typedef struct {
17   /* headers */
18   unsigned int ID;
19   char *name;
20   unsigned int name_len;
21
22   /* payload */
23   char *data;
24 } s_my_elem_t, *my_elem_t;
25
26
27 static void my_elem_free(void *e)
28 {
29   my_elem_t elm = (my_elem_t) e;
30
31   if (elm) {
32     free(elm->name);
33     free(elm->data);
34     free(elm);
35   }
36 }
37
38 static void debuged_add(xbt_set_t set, const char *name, const char *data)
39 {
40   my_elem_t elm;
41
42   elm = xbt_new(s_my_elem_t, 1);
43   elm->name = xbt_strdup(name);
44   elm->name_len = 0;
45
46   elm->data = xbt_strdup(data);
47
48   xbt_test_log2("Add %s (->%s)", name, data);
49   xbt_set_add(set, (xbt_set_elm_t) elm, &my_elem_free);
50 }
51
52 static void fill(xbt_set_t * set)
53 {
54   xbt_test_add0("Fill in the data set");
55
56   *set = xbt_set_new();
57   debuged_add(*set, "12", "12");
58   debuged_add(*set, "12a", "12a");
59   debuged_add(*set, "12b", "12b");
60   debuged_add(*set, "123", "123");
61   debuged_add(*set, "123456", "123456");
62   xbt_test_log0("Child becomes child of what to add");
63   debuged_add(*set, "1234", "1234");
64   xbt_test_log0("Need of common ancestor");
65   debuged_add(*set, "123457", "123457");
66 }
67
68 static void search_name(xbt_set_t head, const char *key)
69 {
70   my_elem_t elm;
71
72   xbt_test_add1("Search by name %s", key);
73   elm = (my_elem_t) xbt_set_get_by_name(head, key);
74   xbt_test_log2(" Found %s (under ID %d)\n",
75                 elm ? elm->data : "(null)", elm ? elm->ID : -1);
76   if (strcmp(key, elm->name))
77     THROW2(mismatch_error, 0, "The key (%s) is not the one expected (%s)",
78            key, elm->name);
79   if (strcmp(elm->name, elm->data))
80     THROW2(mismatch_error, 0, "The name (%s) != data (%s)", key,
81            elm->name);
82   fflush(stdout);
83 }
84
85 static void search_id(xbt_set_t head, int id, const char *key)
86 {
87   my_elem_t elm;
88
89   xbt_test_add1("Search by id %d", id);
90   elm = (my_elem_t) xbt_set_get_by_id(head, id);
91   xbt_test_log2("Found %s (data %s)",
92                 elm ? elm->name : "(null)", elm ? elm->data : "(null)");
93   if (id != elm->ID)
94     THROW2(mismatch_error, 0,
95            "The found ID (%d) is not the one expected (%d)", elm->ID, id);
96   if (strcmp(key, elm->name))
97     THROW2(mismatch_error, 0, "The key (%s) is not the one expected (%s)",
98            elm->name, key);
99   if (strcmp(elm->name, elm->data))
100     THROW2(mismatch_error, 0, "The name (%s) != data (%s)",
101            elm->name, elm->data);
102 }
103
104
105 static void traverse(xbt_set_t set)
106 {
107   xbt_set_cursor_t cursor = NULL;
108   my_elem_t elm = NULL;
109
110   xbt_set_foreach(set, cursor, elm) {
111     xbt_test_assert0(elm, "Dude ! Got a null elm during traversal!");
112     xbt_test_log3("Id(%d):  %s->%s\n", elm->ID, elm->name, elm->data);
113     xbt_test_assert2(!strcmp(elm->name, elm->data),
114                      "Key(%s) != value(%s). Abording", elm->name,
115                      elm->data);
116   }
117 }
118
119 static void search_not_found(xbt_set_t set, const char *data)
120 {
121   xbt_ex_t e;
122
123   xbt_test_add1("Search %s (expected not to be found)", data);
124   TRY {
125     xbt_set_get_by_name(set, data);
126     THROW1(unknown_error, 0,
127            "Found something which shouldn't be there (%s)", data);
128   } CATCH(e) {
129     if (e.category != not_found_error)
130       xbt_test_exception(e);
131     xbt_ex_free(e);
132   }
133 }
134
135 xbt_set_t set = NULL;
136
137
138 XBT_TEST_UNIT("basic", test_set_basic, "Basic usage")
139 {
140   set = NULL;
141
142   xbt_test_add0("Traverse the empty set");
143   traverse(set);
144
145   xbt_test_add0("Free a data set");
146   fill(&set);
147   xbt_set_free(&set);
148
149   xbt_test_add0("Free the NULL data set");
150   xbt_set_free(&set);
151
152 }
153
154 XBT_TEST_UNIT("change", test_set_change, "Changing some values")
155 {
156   fill(&set);
157
158   xbt_test_add0("Change 123 to 'Changed 123'");
159   debuged_add(set, "123", "Changed 123");
160
161   xbt_test_add0("Change 123 back to '123'");
162   debuged_add(set, "123", "123");
163
164   xbt_test_add0("Change 12a to 'Dummy 12a'");
165   debuged_add(set, "12a", "Dummy 12a");
166
167   xbt_test_add0("Change 12a to '12a'");
168   debuged_add(set, "12a", "12a");
169
170   /*  xbt_dict_dump(head,(void (*)(void*))&printf); */
171   xbt_test_add0("Traverse the resulting data set");
172   traverse(set);
173 }
174
175 XBT_TEST_UNIT("retrieve", test_set_retrieve, "Retrieving some values")
176 {
177   my_elem_t elm;
178
179   xbt_test_add0("Search 123");
180   elm = (my_elem_t) xbt_set_get_by_name(set, "123");
181   xbt_test_assert0(elm, "elm must be there");
182   xbt_assert(!strcmp("123", elm->data));
183
184   search_not_found(set, "Can't be found");
185   search_not_found(set, "123 Can't be found");
186   search_not_found(set, "12345678 NOT");
187
188   search_name(set, "12");
189   search_name(set, "12a");
190   search_name(set, "12b");
191   search_name(set, "123");
192   search_name(set, "123456");
193   search_name(set, "1234");
194   search_name(set, "123457");
195
196   search_id(set, 0, "12");
197   search_id(set, 1, "12a");
198   search_id(set, 2, "12b");
199   search_id(set, 3, "123");
200   search_id(set, 4, "123456");
201   search_id(set, 5, "1234");
202   search_id(set, 6, "123457");
203
204   xbt_test_add0("Traverse the resulting data set");
205   traverse(set);
206
207   /*  xbt_dict_dump(head,(void (*)(void*))&printf); */
208
209   xbt_test_add0("Free the data set (twice)");
210   xbt_set_free(&set);
211   xbt_set_free(&set);
212
213   xbt_test_add0("Traverse the resulting data set");
214   traverse(set);
215 }
216
217 XBT_TEST_UNIT("remove", test_set_remove, "Removing some values")
218 {
219   my_elem_t elm;
220
221   xbt_set_free(&set);
222   fill(&set);
223
224   xbt_set_remove_by_name(set, "12a");
225   search_not_found(set, "12a");
226
227   search_name(set, "12");
228   search_name(set, "12b");
229   search_name(set, "123");
230   search_name(set, "123456");
231   search_name(set, "1234");
232   search_name(set, "123457");
233
234   search_id(set, 0, "12");
235   search_id(set, 2, "12b");
236   search_id(set, 3, "123");
237   search_id(set, 4, "123456");
238   search_id(set, 5, "1234");
239   search_id(set, 6, "123457");
240
241   debuged_add(set, "12anew", "12anew");
242   elm = (my_elem_t) xbt_set_get_by_id(set, 1);
243   xbt_test_assert1(elm->ID == 1, "elm->ID is %d but should be 1", elm->ID);
244 }
245
246 /*******************************/
247 /* GENERATED FILE, DO NOT EDIT */
248 /*******************************/
249