diff options
Diffstat (limited to 'fluent-bit/lib/jansson-e23f558/test/suites/api/test_array.c')
-rw-r--r-- | fluent-bit/lib/jansson-e23f558/test/suites/api/test_array.c | 484 |
1 files changed, 484 insertions, 0 deletions
diff --git a/fluent-bit/lib/jansson-e23f558/test/suites/api/test_array.c b/fluent-bit/lib/jansson-e23f558/test/suites/api/test_array.c new file mode 100644 index 000000000..e5d9d1a19 --- /dev/null +++ b/fluent-bit/lib/jansson-e23f558/test/suites/api/test_array.c @@ -0,0 +1,484 @@ +/* + * Copyright (c) 2009-2016 Petri Lehtinen <petri@digip.org> + * + * Jansson is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See LICENSE for details. + */ + +#include "util.h" +#include <jansson.h> + +static void test_misc(void) { + json_t *array, *five, *seven, *value; + size_t i; + + array = json_array(); + five = json_integer(5); + seven = json_integer(7); + + if (!array) + fail("unable to create array"); + if (!five || !seven) + fail("unable to create integer"); + + if (json_array_size(array) != 0) + fail("empty array has nonzero size"); + + if (!json_array_append(array, NULL)) + fail("able to append NULL"); + + if (json_array_append(array, five)) + fail("unable to append"); + + if (json_array_size(array) != 1) + fail("wrong array size"); + + value = json_array_get(array, 0); + if (!value) + fail("unable to get item"); + if (value != five) + fail("got wrong value"); + + if (json_array_append(array, seven)) + fail("unable to append value"); + + if (json_array_size(array) != 2) + fail("wrong array size"); + + value = json_array_get(array, 1); + if (!value) + fail("unable to get item"); + if (value != seven) + fail("got wrong value"); + + if (json_array_set(array, 0, seven)) + fail("unable to set value"); + + if (!json_array_set(array, 0, NULL)) + fail("able to set NULL"); + + if (json_array_size(array) != 2) + fail("wrong array size"); + + value = json_array_get(array, 0); + if (!value) + fail("unable to get item"); + if (value != seven) + fail("got wrong value"); + + if (json_array_get(array, 2) != NULL) + fail("able to get value out of bounds"); + + if (!json_array_set(array, 2, seven)) + fail("able to set value out of bounds"); + + for (i = 2; i < 30; i++) { + if (json_array_append(array, seven)) + fail("unable to append value"); + + if (json_array_size(array) != i + 1) + fail("wrong array size"); + } + + for (i = 0; i < 30; i++) { + value = json_array_get(array, i); + if (!value) + fail("unable to get item"); + if (value != seven) + fail("got wrong value"); + } + + if (json_array_set_new(array, 15, json_integer(123))) + fail("unable to set new value"); + + value = json_array_get(array, 15); + if (!json_is_integer(value) || json_integer_value(value) != 123) + fail("json_array_set_new works incorrectly"); + + if (!json_array_set_new(array, 15, NULL)) + fail("able to set_new NULL value"); + + if (json_array_append_new(array, json_integer(321))) + fail("unable to append new value"); + + value = json_array_get(array, json_array_size(array) - 1); + if (!json_is_integer(value) || json_integer_value(value) != 321) + fail("json_array_append_new works incorrectly"); + + if (!json_array_append_new(array, NULL)) + fail("able to append_new NULL value"); + + json_decref(five); + json_decref(seven); + json_decref(array); +} + +static void test_insert(void) { + json_t *array, *five, *seven, *eleven, *value; + int i; + + array = json_array(); + five = json_integer(5); + seven = json_integer(7); + eleven = json_integer(11); + + if (!array) + fail("unable to create array"); + if (!five || !seven || !eleven) + fail("unable to create integer"); + + if (!json_array_insert(array, 1, five)) + fail("able to insert value out of bounds"); + + if (json_array_insert(array, 0, five)) + fail("unable to insert value in an empty array"); + + if (json_array_get(array, 0) != five) + fail("json_array_insert works incorrectly"); + + if (json_array_size(array) != 1) + fail("array size is invalid after insertion"); + + if (json_array_insert(array, 1, seven)) + fail("unable to insert value at the end of an array"); + + if (json_array_get(array, 0) != five) + fail("json_array_insert works incorrectly"); + + if (json_array_get(array, 1) != seven) + fail("json_array_insert works incorrectly"); + + if (json_array_size(array) != 2) + fail("array size is invalid after insertion"); + + if (json_array_insert(array, 1, eleven)) + fail("unable to insert value in the middle of an array"); + + if (json_array_get(array, 0) != five) + fail("json_array_insert works incorrectly"); + + if (json_array_get(array, 1) != eleven) + fail("json_array_insert works incorrectly"); + + if (json_array_get(array, 2) != seven) + fail("json_array_insert works incorrectly"); + + if (json_array_size(array) != 3) + fail("array size is invalid after insertion"); + + if (json_array_insert_new(array, 2, json_integer(123))) + fail("unable to insert value in the middle of an array"); + + value = json_array_get(array, 2); + if (!json_is_integer(value) || json_integer_value(value) != 123) + fail("json_array_insert_new works incorrectly"); + + if (json_array_size(array) != 4) + fail("array size is invalid after insertion"); + + for (i = 0; i < 20; i++) { + if (json_array_insert(array, 0, seven)) + fail("unable to insert value at the beginning of an array"); + } + + for (i = 0; i < 20; i++) { + if (json_array_get(array, i) != seven) + fail("json_aray_insert works incorrectly"); + } + + if (json_array_size(array) != 24) + fail("array size is invalid after loop insertion"); + + json_decref(five); + json_decref(seven); + json_decref(eleven); + json_decref(array); +} + +static void test_remove(void) { + json_t *array, *five, *seven; + int i; + + array = json_array(); + five = json_integer(5); + seven = json_integer(7); + + if (!array) + fail("unable to create array"); + if (!five) + fail("unable to create integer"); + if (!seven) + fail("unable to create integer"); + + if (!json_array_remove(array, 0)) + fail("able to remove an unexisting index"); + + if (json_array_append(array, five)) + fail("unable to append"); + + if (!json_array_remove(array, 1)) + fail("able to remove an unexisting index"); + + if (json_array_remove(array, 0)) + fail("unable to remove"); + + if (json_array_size(array) != 0) + fail("array size is invalid after removing"); + + if (json_array_append(array, five) || json_array_append(array, seven) || + json_array_append(array, five) || json_array_append(array, seven)) + fail("unable to append"); + + if (json_array_remove(array, 2)) + fail("unable to remove"); + + if (json_array_size(array) != 3) + fail("array size is invalid after removing"); + + if (json_array_get(array, 0) != five || json_array_get(array, 1) != seven || + json_array_get(array, 2) != seven) + fail("remove works incorrectly"); + + json_decref(array); + + array = json_array(); + for (i = 0; i < 4; i++) { + json_array_append(array, five); + json_array_append(array, seven); + } + if (json_array_size(array) != 8) + fail("unable to append 8 items to array"); + + /* Remove an element from a "full" array. */ + json_array_remove(array, 5); + + json_decref(five); + json_decref(seven); + json_decref(array); +} + +static void test_clear(void) { + json_t *array, *five, *seven; + int i; + + array = json_array(); + five = json_integer(5); + seven = json_integer(7); + + if (!array) + fail("unable to create array"); + if (!five || !seven) + fail("unable to create integer"); + + for (i = 0; i < 10; i++) { + if (json_array_append(array, five)) + fail("unable to append"); + } + for (i = 0; i < 10; i++) { + if (json_array_append(array, seven)) + fail("unable to append"); + } + + if (json_array_size(array) != 20) + fail("array size is invalid after appending"); + + if (json_array_clear(array)) + fail("unable to clear"); + + if (json_array_size(array) != 0) + fail("array size is invalid after clearing"); + + json_decref(five); + json_decref(seven); + json_decref(array); +} + +static void test_extend(void) { + json_t *array1, *array2, *five, *seven; + int i; + + array1 = json_array(); + array2 = json_array(); + five = json_integer(5); + seven = json_integer(7); + + if (!array1 || !array2) + fail("unable to create array"); + if (!five || !seven) + fail("unable to create integer"); + + for (i = 0; i < 10; i++) { + if (json_array_append(array1, five)) + fail("unable to append"); + } + for (i = 0; i < 10; i++) { + if (json_array_append(array2, seven)) + fail("unable to append"); + } + + if (json_array_size(array1) != 10 || json_array_size(array2) != 10) + fail("array size is invalid after appending"); + + if (json_array_extend(array1, array2)) + fail("unable to extend"); + + for (i = 0; i < 10; i++) { + if (json_array_get(array1, i) != five) + fail("invalid array contents after extending"); + } + for (i = 10; i < 20; i++) { + if (json_array_get(array1, i) != seven) + fail("invalid array contents after extending"); + } + + json_decref(five); + json_decref(seven); + json_decref(array1); + json_decref(array2); +} + +static void test_circular() { + json_t *array1, *array2; + + /* the simple cases are checked */ + + array1 = json_array(); + if (!array1) + fail("unable to create array"); + + if (json_array_append(array1, array1) == 0) + fail("able to append self"); + + if (json_array_insert(array1, 0, array1) == 0) + fail("able to insert self"); + + if (json_array_append_new(array1, json_true())) + fail("failed to append true"); + + if (json_array_set(array1, 0, array1) == 0) + fail("able to set self"); + + json_decref(array1); + + /* create circular references */ + + array1 = json_array(); + array2 = json_array(); + if (!array1 || !array2) + fail("unable to create array"); + + if (json_array_append(array1, array2) || json_array_append(array2, array1)) + fail("unable to append"); + + /* circularity is detected when dumping */ + if (json_dumps(array1, 0) != NULL) + fail("able to dump circulars"); + + /* decref twice to deal with the circular references */ + json_decref(array1); + json_decref(array2); + json_decref(array1); +} + +static void test_array_foreach() { + size_t index; + json_t *array1, *array2, *value; + + array1 = json_pack("[sisisi]", "foo", 1, "bar", 2, "baz", 3); + array2 = json_array(); + + json_array_foreach(array1, index, value) { json_array_append(array2, value); } + + if (!json_equal(array1, array2)) + fail("json_array_foreach failed to iterate all elements"); + + json_decref(array1); + json_decref(array2); +} + +static void test_bad_args(void) { + json_t *arr = json_array(); + json_t *num = json_integer(1); + + if (!arr || !num) + fail("failed to create required objects"); + + if (json_array_size(NULL) != 0) + fail("NULL array has nonzero size"); + if (json_array_size(num) != 0) + fail("non-array has nonzero array size"); + + if (json_array_get(NULL, 0)) + fail("json_array_get did not return NULL for non-array"); + if (json_array_get(num, 0)) + fail("json_array_get did not return NULL for non-array"); + + if (!json_array_set_new(NULL, 0, json_incref(num))) + fail("json_array_set_new did not return error for non-array"); + if (!json_array_set_new(num, 0, json_incref(num))) + fail("json_array_set_new did not return error for non-array"); + if (!json_array_set_new(arr, 0, NULL)) + fail("json_array_set_new did not return error for NULL value"); + if (!json_array_set_new(arr, 0, json_incref(arr))) + fail("json_array_set_new did not return error for value == array"); + + if (!json_array_remove(NULL, 0)) + fail("json_array_remove did not return error for non-array"); + if (!json_array_remove(num, 0)) + fail("json_array_remove did not return error for non-array"); + + if (!json_array_clear(NULL)) + fail("json_array_clear did not return error for non-array"); + if (!json_array_clear(num)) + fail("json_array_clear did not return error for non-array"); + + if (!json_array_append_new(NULL, json_incref(num))) + fail("json_array_append_new did not return error for non-array"); + if (!json_array_append_new(num, json_incref(num))) + fail("json_array_append_new did not return error for non-array"); + if (!json_array_append_new(arr, NULL)) + fail("json_array_append_new did not return error for NULL value"); + if (!json_array_append_new(arr, json_incref(arr))) + fail("json_array_append_new did not return error for value == array"); + + if (!json_array_insert_new(NULL, 0, json_incref(num))) + fail("json_array_insert_new did not return error for non-array"); + if (!json_array_insert_new(num, 0, json_incref(num))) + fail("json_array_insert_new did not return error for non-array"); + if (!json_array_insert_new(arr, 0, NULL)) + fail("json_array_insert_new did not return error for NULL value"); + if (!json_array_insert_new(arr, 0, json_incref(arr))) + fail("json_array_insert_new did not return error for value == array"); + + if (!json_array_extend(NULL, arr)) + fail("json_array_extend did not return error for first argument " + "non-array"); + if (!json_array_extend(num, arr)) + fail("json_array_extend did not return error for first argument " + "non-array"); + if (!json_array_extend(arr, NULL)) + fail("json_array_extend did not return error for second argument " + "non-array"); + if (!json_array_extend(arr, num)) + fail("json_array_extend did not return error for second argument " + "non-array"); + + if (num->refcount != 1) + fail("unexpected reference count on num"); + if (arr->refcount != 1) + fail("unexpected reference count on arr"); + + json_decref(num); + json_decref(arr); +} + +static void run_tests() { + test_misc(); + test_insert(); + test_remove(); + test_clear(); + test_extend(); + test_circular(); + test_array_foreach(); + test_bad_args(); +} |