printTo.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. // Copyright Benoit Blanchon 2014-2017
  2. // MIT License
  3. //
  4. // Arduino JSON library
  5. // https://bblanchon.github.io/ArduinoJson/
  6. // If you like this project, please add a star!
  7. #include <ArduinoJson.h>
  8. #include <gtest/gtest.h>
  9. #include <limits>
  10. class JsonVariant_PrintTo_Tests : public testing::Test {
  11. protected:
  12. JsonVariant variant;
  13. void outputMustBe(const char *expected) {
  14. char buffer[256] = "";
  15. size_t n = variant.printTo(buffer, sizeof(buffer));
  16. ASSERT_STREQ(expected, buffer);
  17. ASSERT_EQ(strlen(expected), n);
  18. }
  19. };
  20. TEST_F(JsonVariant_PrintTo_Tests, Empty) {
  21. outputMustBe("");
  22. }
  23. TEST_F(JsonVariant_PrintTo_Tests, Null) {
  24. variant = static_cast<char *>(0);
  25. outputMustBe("null");
  26. }
  27. TEST_F(JsonVariant_PrintTo_Tests, String) {
  28. variant = "hello";
  29. outputMustBe("\"hello\"");
  30. }
  31. TEST_F(JsonVariant_PrintTo_Tests, DoubleZero) {
  32. variant = 0.0;
  33. outputMustBe("0.00");
  34. }
  35. TEST_F(JsonVariant_PrintTo_Tests, DoubleDefaultDigits) {
  36. variant = 3.14159265358979323846;
  37. outputMustBe("3.14");
  38. }
  39. TEST_F(JsonVariant_PrintTo_Tests, DoubleFourDigits) {
  40. variant = JsonVariant(3.14159265358979323846, 4);
  41. outputMustBe("3.1416");
  42. }
  43. TEST_F(JsonVariant_PrintTo_Tests, Infinity) {
  44. variant = std::numeric_limits<double>::infinity();
  45. outputMustBe("Infinity");
  46. }
  47. TEST_F(JsonVariant_PrintTo_Tests, MinusInfinity) {
  48. variant = -std::numeric_limits<double>::infinity();
  49. outputMustBe("-Infinity");
  50. }
  51. TEST_F(JsonVariant_PrintTo_Tests, SignalingNaN) {
  52. variant = std::numeric_limits<double>::signaling_NaN();
  53. outputMustBe("NaN");
  54. }
  55. TEST_F(JsonVariant_PrintTo_Tests, QuietNaN) {
  56. variant = std::numeric_limits<double>::quiet_NaN();
  57. outputMustBe("NaN");
  58. }
  59. TEST_F(JsonVariant_PrintTo_Tests, VeryBigPositiveDouble) {
  60. variant = JsonVariant(3.14159265358979323846e42, 4);
  61. outputMustBe("3.1416e42");
  62. }
  63. TEST_F(JsonVariant_PrintTo_Tests, VeryBigNegativeDouble) {
  64. variant = JsonVariant(-3.14159265358979323846e42, 4);
  65. outputMustBe("-3.1416e42");
  66. }
  67. TEST_F(JsonVariant_PrintTo_Tests, VerySmallPositiveDouble) {
  68. variant = JsonVariant(3.14159265358979323846e-42, 4);
  69. outputMustBe("3.1416e-42");
  70. }
  71. TEST_F(JsonVariant_PrintTo_Tests, VerySmallNegativeDouble) {
  72. variant = JsonVariant(-3.14159265358979323846e-42, 4);
  73. outputMustBe("-3.1416e-42");
  74. }
  75. TEST_F(JsonVariant_PrintTo_Tests, Integer) {
  76. variant = 42;
  77. outputMustBe("42");
  78. }
  79. TEST_F(JsonVariant_PrintTo_Tests, NegativeLong) {
  80. variant = -42;
  81. outputMustBe("-42");
  82. }
  83. TEST_F(JsonVariant_PrintTo_Tests, UnsignedLong) {
  84. variant = 4294967295UL;
  85. outputMustBe("4294967295");
  86. }
  87. TEST_F(JsonVariant_PrintTo_Tests, True) {
  88. variant = true;
  89. outputMustBe("true");
  90. }
  91. TEST_F(JsonVariant_PrintTo_Tests, OneFalse) {
  92. variant = false;
  93. outputMustBe("false");
  94. }
  95. #if ARDUINOJSON_USE_LONG_LONG || ARDUINOJSON_USE_INT64
  96. TEST_F(JsonVariant_PrintTo_Tests, NegativeInt64) {
  97. variant = -9223372036854775807 - 1;
  98. outputMustBe("-9223372036854775808");
  99. }
  100. TEST_F(JsonVariant_PrintTo_Tests, PositiveInt64) {
  101. variant = 9223372036854775807;
  102. outputMustBe("9223372036854775807");
  103. }
  104. TEST_F(JsonVariant_PrintTo_Tests, UInt64) {
  105. variant = 18446744073709551615;
  106. outputMustBe("18446744073709551615");
  107. }
  108. #endif