JsonWriter_WriteFloat_Tests.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. // Copyright Benoit Blanchon 2014-2016
  2. // MIT License
  3. //
  4. // Arduino JSON library
  5. // https://github.com/bblanchon/ArduinoJson
  6. // If you like this project, please add a star!
  7. #include <gtest/gtest.h>
  8. #include <limits>
  9. #include <ArduinoJson/Internals/JsonWriter.hpp>
  10. #include <ArduinoJson/Internals/StaticStringBuilder.hpp>
  11. using namespace ArduinoJson::Internals;
  12. class JsonWriter_WriteFloat_Tests : public testing::Test {
  13. protected:
  14. void whenInputIs(double input, uint8_t digits = 2) {
  15. StaticStringBuilder sb(buffer, sizeof(buffer));
  16. JsonWriter writer(sb);
  17. writer.writeFloat(input, digits);
  18. returnValue = writer.bytesWritten();
  19. }
  20. void outputMustBe(const char *expected) {
  21. EXPECT_STREQ(expected, buffer);
  22. EXPECT_EQ(strlen(expected), returnValue);
  23. }
  24. private:
  25. char buffer[1024];
  26. size_t returnValue;
  27. };
  28. TEST_F(JsonWriter_WriteFloat_Tests, NaN) {
  29. whenInputIs(std::numeric_limits<double>::signaling_NaN());
  30. outputMustBe("NaN");
  31. }
  32. TEST_F(JsonWriter_WriteFloat_Tests, PositiveInfinity) {
  33. whenInputIs(std::numeric_limits<double>::infinity());
  34. outputMustBe("Infinity");
  35. }
  36. TEST_F(JsonWriter_WriteFloat_Tests, NegativeInfinity) {
  37. whenInputIs(-std::numeric_limits<double>::infinity());
  38. outputMustBe("-Infinity");
  39. }
  40. TEST_F(JsonWriter_WriteFloat_Tests, Zero) {
  41. whenInputIs(0);
  42. outputMustBe("0.00");
  43. }
  44. TEST_F(JsonWriter_WriteFloat_Tests, ZeroDigits_Rounding) {
  45. whenInputIs(9.5, 0);
  46. outputMustBe("10");
  47. }
  48. TEST_F(JsonWriter_WriteFloat_Tests, ZeroDigits_NoRounding) {
  49. whenInputIs(9.4, 0);
  50. outputMustBe("9");
  51. }
  52. TEST_F(JsonWriter_WriteFloat_Tests, OneDigit_Rounding) {
  53. whenInputIs(9.95, 1);
  54. outputMustBe("10.0");
  55. }
  56. TEST_F(JsonWriter_WriteFloat_Tests, OneDigit_NoRounding) {
  57. whenInputIs(9.94, 1);
  58. outputMustBe("9.9");
  59. }
  60. TEST_F(JsonWriter_WriteFloat_Tests, TwoDigits_Rounding) {
  61. whenInputIs(9.995, 2);
  62. outputMustBe("10.00");
  63. }
  64. TEST_F(JsonWriter_WriteFloat_Tests, TwoDigits_NoRounding) {
  65. whenInputIs(9.994, 2);
  66. outputMustBe("9.99");
  67. }
  68. TEST_F(JsonWriter_WriteFloat_Tests, ThreeDigits_Rounding) {
  69. whenInputIs(9.9995, 3);
  70. outputMustBe("10.000");
  71. }
  72. TEST_F(JsonWriter_WriteFloat_Tests, ThreeDigits_NoRounding) {
  73. whenInputIs(9.9994, 3);
  74. outputMustBe("9.999");
  75. }
  76. TEST_F(JsonWriter_WriteFloat_Tests, FourDigits_Rounding) {
  77. whenInputIs(9.99995, 4);
  78. outputMustBe("10.0000");
  79. }
  80. TEST_F(JsonWriter_WriteFloat_Tests, FourDigits_NoRounding) {
  81. whenInputIs(9.99994, 4);
  82. outputMustBe("9.9999");
  83. }
  84. TEST_F(JsonWriter_WriteFloat_Tests, FiveDigits_Rounding) {
  85. whenInputIs(9.999995, 5);
  86. outputMustBe("10.00000");
  87. }
  88. TEST_F(JsonWriter_WriteFloat_Tests, FiveDigits_NoRounding) {
  89. whenInputIs(9.999994, 5);
  90. outputMustBe("9.99999");
  91. }