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_set_value.c 4.2 kB

5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #ifdef NDEBUG
  2. #undef NDEBUG
  3. #endif
  4. #include <assert.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include "json.h"
  8. int main(int argc, char **argv)
  9. {
  10. json_object *tmp = json_object_new_int(123);
  11. assert(json_object_get_int(tmp) == 123);
  12. json_object_set_int(tmp, 321);
  13. assert(json_object_get_int(tmp) == 321);
  14. printf("INT PASSED\n");
  15. json_object_set_int64(tmp, (int64_t)321321321);
  16. assert(json_object_get_int64(tmp) == 321321321);
  17. json_object_put(tmp);
  18. printf("INT64 PASSED\n");
  19. tmp = json_object_new_uint64(123);
  20. assert(json_object_get_boolean(tmp) == 1);
  21. assert(json_object_get_int(tmp) == 123);
  22. assert(json_object_get_int64(tmp) == 123);
  23. assert(json_object_get_uint64(tmp) == 123);
  24. assert(json_object_get_double(tmp) == 123.000000);
  25. json_object_set_uint64(tmp, (uint64_t)321321321);
  26. assert(json_object_get_uint64(tmp) == 321321321);
  27. json_object_set_uint64(tmp, 9223372036854775808U);
  28. assert(json_object_get_int(tmp) == INT32_MAX);
  29. assert(json_object_get_uint64(tmp) == 9223372036854775808U);
  30. json_object_put(tmp);
  31. printf("UINT64 PASSED\n");
  32. tmp = json_object_new_boolean(1);
  33. assert(json_object_get_boolean(tmp) == 1);
  34. json_object_set_boolean(tmp, 0);
  35. assert(json_object_get_boolean(tmp) == 0);
  36. json_object_set_boolean(tmp, 1);
  37. assert(json_object_get_boolean(tmp) == 1);
  38. json_object_put(tmp);
  39. printf("BOOL PASSED\n");
  40. tmp = json_object_new_double(12.34);
  41. assert(json_object_get_double(tmp) == 12.34);
  42. json_object_set_double(tmp, 34.56);
  43. assert(json_object_get_double(tmp) == 34.56);
  44. json_object_set_double(tmp, 6435.34);
  45. assert(json_object_get_double(tmp) == 6435.34);
  46. json_object_set_double(tmp, 2e21);
  47. assert(json_object_get_int(tmp) == INT32_MAX);
  48. assert(json_object_get_int64(tmp) == INT64_MAX);
  49. assert(json_object_get_uint64(tmp) == UINT64_MAX);
  50. json_object_set_double(tmp, -2e21);
  51. assert(json_object_get_int(tmp) == INT32_MIN);
  52. assert(json_object_get_int64(tmp) == INT64_MIN);
  53. assert(json_object_get_uint64(tmp) == 0);
  54. json_object_put(tmp);
  55. printf("DOUBLE PASSED\n");
  56. #define SHORT "SHORT"
  57. #define MID "A MID STRING"
  58. // 12345678901234567890123456789012....
  59. #define HUGE "A string longer than 32 chars as to check non local buf codepath"
  60. tmp = json_object_new_string(MID);
  61. assert(strcmp(json_object_get_string(tmp), MID) == 0);
  62. assert(strcmp(json_object_to_json_string(tmp), "\"" MID "\"") == 0);
  63. json_object_set_string(tmp, SHORT);
  64. assert(strcmp(json_object_get_string(tmp), SHORT) == 0);
  65. assert(strcmp(json_object_to_json_string(tmp), "\"" SHORT "\"") == 0);
  66. json_object_set_string(tmp, HUGE);
  67. assert(strcmp(json_object_get_string(tmp), HUGE) == 0);
  68. assert(strcmp(json_object_to_json_string(tmp), "\"" HUGE "\"") == 0);
  69. json_object_set_string(tmp, SHORT);
  70. assert(strcmp(json_object_get_string(tmp), SHORT) == 0);
  71. assert(strcmp(json_object_to_json_string(tmp), "\"" SHORT "\"") == 0);
  72. // Set an empty string a couple times to try to trigger
  73. // a case that used to leak memory.
  74. json_object_set_string(tmp, "");
  75. json_object_set_string(tmp, HUGE);
  76. json_object_set_string(tmp, "");
  77. json_object_set_string(tmp, HUGE);
  78. json_object_put(tmp);
  79. printf("STRING PASSED\n");
  80. #define STR "STR"
  81. #define DOUBLE "123.123"
  82. #define DOUBLE_E "12E+3"
  83. #define DOUBLE_STR "123.123STR"
  84. #define DOUBLE_OVER "1.8E+308"
  85. #define DOUBLE_OVER_NEGATIVE "-1.8E+308"
  86. tmp = json_object_new_string(STR);
  87. assert(json_object_get_double(tmp) == 0.0);
  88. json_object_set_string(tmp, DOUBLE);
  89. assert(json_object_get_double(tmp) == 123.123000);
  90. json_object_set_string(tmp, DOUBLE_E);
  91. assert(json_object_get_double(tmp) == 12000.000000);
  92. json_object_set_string(tmp, DOUBLE_STR);
  93. assert(json_object_get_double(tmp) == 0.0);
  94. json_object_set_string(tmp, DOUBLE_OVER);
  95. assert(json_object_get_double(tmp) == 0.0);
  96. json_object_set_string(tmp, DOUBLE_OVER_NEGATIVE);
  97. assert(json_object_get_double(tmp) == 0.0);
  98. json_object_put(tmp);
  99. printf("STRINGTODOUBLE PASSED\n");
  100. tmp = json_tokener_parse("1.234");
  101. json_object_set_double(tmp, 12.3);
  102. const char *serialized = json_object_to_json_string(tmp);
  103. fprintf(stderr, "%s\n", serialized);
  104. assert(strncmp(serialized, "12.3", 4) == 0);
  105. json_object_put(tmp);
  106. printf("PARSE AND SET PASSED\n");
  107. printf("PASSED\n");
  108. return 0;
  109. }