2 * Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
4 * Jansson is free software; you can redistribute it and/or modify
5 * it under the terms of the MIT license. See LICENSE for details.
11 static void test_misc(void)
13 json_t *array, *five, *seven, *value;
17 five = json_integer(5);
18 seven = json_integer(7);
21 fail("unable to create array");
23 fail("unable to create integer");
25 if(json_array_size(array) != 0)
26 fail("empty array has nonzero size");
28 if(!json_array_append(array, NULL))
29 fail("able to append NULL");
31 if(json_array_append(array, five))
32 fail("unable to append");
34 if(json_array_size(array) != 1)
35 fail("wrong array size");
37 value = json_array_get(array, 0);
39 fail("unable to get item");
41 fail("got wrong value");
43 if(json_array_append(array, seven))
44 fail("unable to append value");
46 if(json_array_size(array) != 2)
47 fail("wrong array size");
49 value = json_array_get(array, 1);
51 fail("unable to get item");
53 fail("got wrong value");
55 if(json_array_set(array, 0, seven))
56 fail("unable to set value");
58 if(!json_array_set(array, 0, NULL))
59 fail("able to set NULL");
61 if(json_array_size(array) != 2)
62 fail("wrong array size");
64 value = json_array_get(array, 0);
66 fail("unable to get item");
68 fail("got wrong value");
70 if(json_array_get(array, 2) != NULL)
71 fail("able to get value out of bounds");
73 if(!json_array_set(array, 2, seven))
74 fail("able to set value out of bounds");
76 for(i = 2; i < 30; i++) {
77 if(json_array_append(array, seven))
78 fail("unable to append value");
80 if(json_array_size(array) != i + 1)
81 fail("wrong array size");
84 for(i = 0; i < 30; i++) {
85 value = json_array_get(array, i);
87 fail("unable to get item");
89 fail("got wrong value");
92 if(json_array_set_new(array, 15, json_integer(123)))
93 fail("unable to set new value");
95 value = json_array_get(array, 15);
96 if(!json_is_integer(value) || json_integer_value(value) != 123)
97 fail("json_array_set_new works incorrectly");
99 if(!json_array_set_new(array, 15, NULL))
100 fail("able to set_new NULL value");
102 if(json_array_append_new(array, json_integer(321)))
103 fail("unable to append new value");
105 value = json_array_get(array, json_array_size(array) - 1);
106 if(!json_is_integer(value) || json_integer_value(value) != 321)
107 fail("json_array_append_new works incorrectly");
109 if(!json_array_append_new(array, NULL))
110 fail("able to append_new NULL value");
117 static void test_insert(void)
119 json_t *array, *five, *seven, *eleven, *value;
122 array = json_array();
123 five = json_integer(5);
124 seven = json_integer(7);
125 eleven = json_integer(11);
128 fail("unable to create array");
129 if(!five || !seven || !eleven)
130 fail("unable to create integer");
133 if(!json_array_insert(array, 1, five))
134 fail("able to insert value out of bounds");
137 if(json_array_insert(array, 0, five))
138 fail("unable to insert value in an empty array");
140 if(json_array_get(array, 0) != five)
141 fail("json_array_insert works incorrectly");
143 if(json_array_size(array) != 1)
144 fail("array size is invalid after insertion");
147 if(json_array_insert(array, 1, seven))
148 fail("unable to insert value at the end of an array");
150 if(json_array_get(array, 0) != five)
151 fail("json_array_insert works incorrectly");
153 if(json_array_get(array, 1) != seven)
154 fail("json_array_insert works incorrectly");
156 if(json_array_size(array) != 2)
157 fail("array size is invalid after insertion");
160 if(json_array_insert(array, 1, eleven))
161 fail("unable to insert value in the middle of an array");
163 if(json_array_get(array, 0) != five)
164 fail("json_array_insert works incorrectly");
166 if(json_array_get(array, 1) != eleven)
167 fail("json_array_insert works incorrectly");
169 if(json_array_get(array, 2) != seven)
170 fail("json_array_insert works incorrectly");
172 if(json_array_size(array) != 3)
173 fail("array size is invalid after insertion");
176 if(json_array_insert_new(array, 2, json_integer(123)))
177 fail("unable to insert value in the middle of an array");
179 value = json_array_get(array, 2);
180 if(!json_is_integer(value) || json_integer_value(value) != 123)
181 fail("json_array_insert_new works incorrectly");
183 if(json_array_size(array) != 4)
184 fail("array size is invalid after insertion");
187 for(i = 0; i < 20; i++) {
188 if(json_array_insert(array, 0, seven))
189 fail("unable to insert value at the begining of an array");
192 for(i = 0; i < 20; i++) {
193 if(json_array_get(array, i) != seven)
194 fail("json_aray_insert works incorrectly");
197 if(json_array_size(array) != 24)
198 fail("array size is invalid after loop insertion");
206 static void test_remove(void)
208 json_t *array, *five, *seven;
210 array = json_array();
211 five = json_integer(5);
212 seven = json_integer(7);
215 fail("unable to create array");
217 fail("unable to create integer");
219 fail("unable to create integer");
222 if(!json_array_remove(array, 0))
223 fail("able to remove an unexisting index");
226 if(json_array_append(array, five))
227 fail("unable to append");
229 if(!json_array_remove(array, 1))
230 fail("able to remove an unexisting index");
232 if(json_array_remove(array, 0))
233 fail("unable to remove");
235 if(json_array_size(array) != 0)
236 fail("array size is invalid after removing");
239 if(json_array_append(array, five) ||
240 json_array_append(array, seven) ||
241 json_array_append(array, five) ||
242 json_array_append(array, seven))
243 fail("unable to append");
245 if(json_array_remove(array, 2))
246 fail("unable to remove");
248 if(json_array_size(array) != 3)
249 fail("array size is invalid after removing");
251 if(json_array_get(array, 0) != five ||
252 json_array_get(array, 1) != seven ||
253 json_array_get(array, 2) != seven)
254 fail("remove works incorrectly");
261 static void test_clear(void)
263 json_t *array, *five, *seven;
266 array = json_array();
267 five = json_integer(5);
268 seven = json_integer(7);
271 fail("unable to create array");
273 fail("unable to create integer");
275 for(i = 0; i < 10; i++) {
276 if(json_array_append(array, five))
277 fail("unable to append");
279 for(i = 0; i < 10; i++) {
280 if(json_array_append(array, seven))
281 fail("unable to append");
284 if(json_array_size(array) != 20)
285 fail("array size is invalid after appending");
287 if(json_array_clear(array))
288 fail("unable to clear");
290 if(json_array_size(array) != 0)
291 fail("array size is invalid after clearing");
298 static void test_extend(void)
300 json_t *array1, *array2, *five, *seven;
303 array1 = json_array();
304 array2 = json_array();
305 five = json_integer(5);
306 seven = json_integer(7);
308 if(!array1 || !array2)
309 fail("unable to create array");
311 fail("unable to create integer");
313 for(i = 0; i < 10; i++) {
314 if(json_array_append(array1, five))
315 fail("unable to append");
317 for(i = 0; i < 10; i++) {
318 if(json_array_append(array2, seven))
319 fail("unable to append");
322 if(json_array_size(array1) != 10 || json_array_size(array2) != 10)
323 fail("array size is invalid after appending");
325 if(json_array_extend(array1, array2))
326 fail("unable to extend");
328 for(i = 0; i < 10; i++) {
329 if(json_array_get(array1, i) != five)
330 fail("invalid array contents after extending");
332 for(i = 10; i < 20; i++) {
333 if(json_array_get(array1, i) != seven)
334 fail("invalid array contents after extending");
343 static void test_circular()
345 json_t *array1, *array2;
347 /* the simple cases are checked */
349 array1 = json_array();
351 fail("unable to create array");
353 if(json_array_append(array1, array1) == 0)
354 fail("able to append self");
356 if(json_array_insert(array1, 0, array1) == 0)
357 fail("able to insert self");
359 if(json_array_append_new(array1, json_true()))
360 fail("failed to append true");
362 if(json_array_set(array1, 0, array1) == 0)
363 fail("able to set self");
368 /* create circular references */
370 array1 = json_array();
371 array2 = json_array();
372 if(!array1 || !array2)
373 fail("unable to create array");
375 if(json_array_append(array1, array2) ||
376 json_array_append(array2, array1))
377 fail("unable to append");
379 /* circularity is detected when dumping */
380 if(json_dumps(array1, 0) != NULL)
381 fail("able to dump circulars");
383 /* decref twice to deal with the circular references */