You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_int_get.c 3.5 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #ifdef NDEBUG
  2. #undef NDEBUG
  3. #endif
  4. #include <assert.h>
  5. #include <stdio.h>
  6. #include <errno.h>
  7. #include <math.h>
  8. #include "json.h"
  9. #define I32_MAX_S "2147483647"
  10. #define I32_MIN_S "-2147483648"
  11. #define I64_MAX_S "9223372036854775807"
  12. #define I64_OVER "9223372036854775808"
  13. #define I64_MIN_S "-9223372036854775808"
  14. #define I64_UNDER "-9223372036854775809"
  15. #define U64_MAX_S "18446744073709551615"
  16. #define U64_OUT_S "18446744073709551616"
  17. #define CHECK_GET(GET_F, J, EXPECTED) { struct json_object *jtmp = J; errno = 0; assert(GET_F(jtmp) == EXPECTED); json_object_put(jtmp); }
  18. #define CHECK_GET_INT(J, EXPECTED) CHECK_GET(json_object_get_int, J, EXPECTED)
  19. #define CHECK_GET_INT64(J, EXPECTED) CHECK_GET(json_object_get_int64, J, EXPECTED)
  20. #define CHECK_GET_UINT64(J, EXPECTED) CHECK_GET(json_object_get_uint64, J, EXPECTED)
  21. #define CHECK_BASE(J, EXPECTED) CHECK_GET_INT(J, EXPECTED); CHECK_GET_INT64(J, EXPECTED); CHECK_GET_UINT64(J, EXPECTED)
  22. #define N_INT json_object_new_int
  23. #define N_I64 json_object_new_int64
  24. #define N_U64 json_object_new_uint64
  25. #define N_STR json_object_new_string
  26. #define N_DBL json_object_new_double
  27. int main(int argc, char **argv)
  28. {
  29. CHECK_BASE(N_INT(5), 5);
  30. CHECK_BASE(N_INT(0), 0);
  31. CHECK_BASE(N_STR("0"), 0);
  32. CHECK_BASE(N_STR("00000"), 0);
  33. CHECK_BASE(N_STR("000004568789"), 4568789);
  34. CHECK_BASE(N_STR("0xFF"), 0 && errno == 0); // Hex-string values being parsed as 0 is the intended behavior
  35. CHECK_BASE(N_STR("333this_seems_a_valid_string"), 333);
  36. CHECK_BASE(N_STR("this_is_not_a_number"), 0 && errno == EINVAL);
  37. CHECK_BASE(N_STR("B0"), 0 && errno == EINVAL);
  38. printf("BASE CHECK PASSED\n");
  39. CHECK_GET_INT(N_I64(INT32_MAX), INT32_MAX && errno == 0);
  40. CHECK_GET_INT(N_I64(INT32_MIN), INT32_MIN && errno == 0);
  41. CHECK_GET_INT(N_I64(INT64_MAX), INT32_MAX && errno == ERANGE);
  42. CHECK_GET_INT(N_I64(INT64_MIN), INT32_MIN && errno == ERANGE);
  43. CHECK_GET_INT(N_STR(I32_MAX_S), INT32_MAX && errno == 0);
  44. CHECK_GET_INT(N_STR(I32_MIN_S), INT32_MIN && errno == 0);
  45. CHECK_GET_INT(N_STR(I64_MAX_S), INT32_MAX && errno == ERANGE);
  46. CHECK_GET_INT(N_STR(I64_MIN_S), INT32_MIN && errno == ERANGE);
  47. CHECK_GET_INT(N_DBL(INFINITY), INT32_MAX && errno == ERANGE);
  48. CHECK_GET_INT(N_DBL(-INFINITY), INT32_MIN && errno == ERANGE);
  49. CHECK_GET_INT(N_DBL(NAN), INT32_MIN && errno == EINVAL);
  50. printf("INT GET PASSED\n");
  51. CHECK_GET_INT64(N_I64(INT64_MAX), INT64_MAX && errno == 0);
  52. CHECK_GET_INT64(N_I64(INT64_MIN), INT64_MIN && errno == 0);
  53. CHECK_GET_INT64(N_STR(I64_MAX_S), INT64_MAX && errno == 0);
  54. CHECK_GET_INT64(N_STR(I64_MIN_S), INT64_MIN && errno == 0);
  55. CHECK_GET_INT64(N_STR(I64_OVER), INT64_MAX && errno == ERANGE);
  56. CHECK_GET_INT64(N_STR(I64_UNDER), INT64_MIN && errno == ERANGE);
  57. CHECK_GET_INT64(N_DBL(INFINITY), INT64_MAX && errno == ERANGE);
  58. CHECK_GET_INT64(N_DBL(-INFINITY), INT64_MIN && errno == ERANGE);
  59. CHECK_GET_INT64(N_DBL(NAN), INT64_MIN && errno == EINVAL);
  60. printf("INT64 GET PASSED\n");
  61. CHECK_GET_UINT64(N_U64(UINT64_MAX), UINT64_MAX && errno == 0);
  62. CHECK_GET_UINT64(N_U64(-1), UINT64_MAX && errno == 0);
  63. CHECK_GET_UINT64(N_STR(U64_OUT_S), UINT64_MAX && errno == ERANGE);
  64. CHECK_GET_UINT64(N_DBL(INFINITY), UINT64_MAX && errno == ERANGE);
  65. CHECK_GET_UINT64(N_DBL(-INFINITY), 0 && errno == ERANGE);
  66. CHECK_GET_UINT64(N_DBL(NAN), 0 && errno == EINVAL);
  67. printf("UINT64 GET PASSED\n");
  68. printf("PASSED\n");
  69. return 0;
  70. }