From b1fb1508ee2ec92b9ec29af9f2da77c4727942c3 Mon Sep 17 00:00:00 2001 From: Federico Francescon Date: Wed, 16 Nov 2022 00:49:18 +0100 Subject: Added basic tests for `json_object_get_int`, `json_object_get_int64`, `json_object_get_uint64` --- .gitignore | 1 + tests/CMakeLists.txt | 1 + tests/test_int_get.c | 65 +++++++++++++++++++++++++++++++++++++++++++++ tests/test_int_get.expected | 4 +++ tests/test_int_get.test | 1 + 5 files changed, 72 insertions(+) create mode 100644 tests/test_int_get.c create mode 100644 tests/test_int_get.expected create mode 120000 tests/test_int_get.test diff --git a/.gitignore b/.gitignore index 8d2cb62..4b7da9f 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ /tests/test_double_serializer /tests/test_float /tests/test_int_add +/tests/test_int_get /tests/test_json_pointer /tests/test_locale /tests/test_null diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index de42641..beef00a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -24,6 +24,7 @@ set(ALL_TEST_NAMES test_double_serializer test_float test_int_add + test_int_get test_locale test_null test_parse diff --git a/tests/test_int_get.c b/tests/test_int_get.c new file mode 100644 index 0000000..be30364 --- /dev/null +++ b/tests/test_int_get.c @@ -0,0 +1,65 @@ +#ifdef NDEBUG +#undef NDEBUG +#endif +#include +#include +#include + +#include "json.h" + +#define I64_MAX_S "9223372036854775807" +#define I64_OVER "9223372036854775808" +#define I64_MIN_S "-9223372036854775808" +#define I64_UNDER "-9223372036854775809" +#define U64_MAX_S "18446744073709551615" +#define U64_OUT_S "18446744073709551616" + +#define CHECK_GET(GET_F, J, EXPECTED) { struct json_object *jtmp = J; errno = 0; assert(GET_F(jtmp) == EXPECTED); json_object_put(jtmp); } +#define CHECK_GET_INT(J, EXPECTED) CHECK_GET(json_object_get_int, J, EXPECTED) +#define CHECK_GET_INT64(J, EXPECTED) CHECK_GET(json_object_get_int64, J, EXPECTED) +#define CHECK_GET_UINT64(J, EXPECTED) CHECK_GET(json_object_get_uint64, J, EXPECTED) + +#define CHECK_BASE(J, EXPECTED) CHECK_GET_INT(J, EXPECTED); CHECK_GET_INT64(J, EXPECTED); CHECK_GET_UINT64(J, EXPECTED) + +#define N_INT json_object_new_int +#define N_I64 json_object_new_int64 +#define N_U64 json_object_new_uint64 +#define N_STR json_object_new_string + +int main(int argc, char **argv) +{ + CHECK_BASE(N_INT(5), 5); + CHECK_BASE(N_INT(0), 0); + CHECK_BASE(N_STR("0"), 0); + CHECK_BASE(N_STR("00000"), 0); + CHECK_BASE(N_STR("000004568789"), 4568789); + CHECK_BASE(N_STR("0xFF"), 0 && errno == 0); // Hex-string values being parsed as 0 is the intended behavior + CHECK_BASE(N_STR("333this_seems_a_valid_string"), 333); + CHECK_BASE(N_STR("this_is_not_a_number"), 0 && errno == EINVAL); + CHECK_BASE(N_STR("B0"), 0 && errno == EINVAL); + printf("BASE CHECK PASSED\n"); + + CHECK_GET_INT(N_I64(INT32_MAX), INT32_MAX && errno == 0); + CHECK_GET_INT(N_I64(INT32_MIN), INT32_MIN && errno == 0); + CHECK_GET_INT(N_I64(INT64_MAX), INT32_MAX && errno == 0); + CHECK_GET_INT(N_I64(INT64_MIN), INT32_MIN && errno == 0); + CHECK_GET_INT(N_STR(I64_MAX_S), INT32_MAX && errno == 0); + CHECK_GET_INT(N_STR(I64_MIN_S), INT32_MIN && errno == 0); + printf("INT GET PASSED\n"); + + CHECK_GET_INT64(N_I64(INT64_MAX), INT64_MAX && errno == 0); + CHECK_GET_INT64(N_I64(INT64_MIN), INT64_MIN && errno == 0); + CHECK_GET_INT64(N_STR(I64_MAX_S), INT64_MAX && errno == 0); + CHECK_GET_INT64(N_STR(I64_MIN_S), INT64_MIN && errno == 0); + CHECK_GET_INT64(N_STR(I64_OVER), INT64_MAX && errno == ERANGE); + CHECK_GET_INT64(N_STR(I64_UNDER), INT64_MIN && errno == ERANGE); + printf("INT64 GET PASSED\n"); + + CHECK_GET_UINT64(N_U64(UINT64_MAX), UINT64_MAX && errno == 0); + CHECK_GET_UINT64(N_U64(-1), UINT64_MAX && errno == 0); + CHECK_GET_UINT64(N_STR(U64_OUT_S), UINT64_MAX && errno == ERANGE); + printf("UINT64 GET PASSED\n"); + + printf("PASSED\n"); + return 0; +} diff --git a/tests/test_int_get.expected b/tests/test_int_get.expected new file mode 100644 index 0000000..cb9073e --- /dev/null +++ b/tests/test_int_get.expected @@ -0,0 +1,4 @@ +CHECK BASE PASSED +INT64 GET PASSED +UINT64 GET PASSED +PASSED diff --git a/tests/test_int_get.test b/tests/test_int_get.test new file mode 120000 index 0000000..58a13f4 --- /dev/null +++ b/tests/test_int_get.test @@ -0,0 +1 @@ +test_basic.test \ No newline at end of file -- cgit v1.2.1 From 1a2fdc49e75d9821ff1b7276586eeb69fe16a6d7 Mon Sep 17 00:00:00 2001 From: Federico Francescon Date: Wed, 16 Nov 2022 01:33:02 +0100 Subject: Fixed `test_int_get` expected output --- tests/test_int_get.expected | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_int_get.expected b/tests/test_int_get.expected index cb9073e..a9d78bf 100644 --- a/tests/test_int_get.expected +++ b/tests/test_int_get.expected @@ -1,4 +1,5 @@ -CHECK BASE PASSED +BASE CHECK PASSED +INT GET PASSED INT64 GET PASSED UINT64 GET PASSED PASSED -- cgit v1.2.1