parseInteger.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 <gtest/gtest.h>
  8. #include <stdint.h>
  9. #include <ArduinoJson/Polyfills/parseInteger.hpp>
  10. using namespace ArduinoJson::Polyfills;
  11. struct Polyfills_ParseInteger_Tests : testing::Test {
  12. template <typename T>
  13. void check(const char* input, T expected) {
  14. T actual = parseInteger<T>(input);
  15. EXPECT_EQ(expected, actual) << input;
  16. }
  17. };
  18. #define TEST_(X) TEST_F(Polyfills_ParseInteger_Tests, X)
  19. TEST_(int8_t) {
  20. check<int8_t>("-128", -128);
  21. check<int8_t>("127", 127);
  22. check<int8_t>("+127", 127);
  23. check<int8_t>("3.14", 3);
  24. // check<int8_t>(" 42", 0);
  25. check<int8_t>("x42", 0);
  26. check<int8_t>("128", -128);
  27. check<int8_t>("-129", 127);
  28. check<int8_t>(NULL, 0);
  29. }
  30. TEST_(int16_t) {
  31. check<int16_t>("-32768", -32768);
  32. check<int16_t>("32767", 32767);
  33. check<int16_t>("+32767", 32767);
  34. check<int16_t>("3.14", 3);
  35. // check<int16_t>(" 42", 0);
  36. check<int16_t>("x42", 0);
  37. check<int16_t>("-32769", 32767);
  38. check<int16_t>("32768", -32768);
  39. check<int16_t>(NULL, 0);
  40. }
  41. TEST_(int32_t) {
  42. check<int32_t>("-2147483648", (-2147483647 - 1));
  43. check<int32_t>("2147483647", 2147483647);
  44. check<int32_t>("+2147483647", 2147483647);
  45. check<int32_t>("3.14", 3);
  46. // check<int32_t>(" 42", 0);
  47. check<int32_t>("x42", 0);
  48. check<int32_t>("-2147483649", 2147483647);
  49. check<int32_t>("2147483648", (-2147483647 - 1));
  50. }
  51. TEST_(uint8_t) {
  52. check<uint8_t>("0", 0);
  53. check<uint8_t>("255", 255);
  54. check<uint8_t>("+255", 255);
  55. check<uint8_t>("3.14", 3);
  56. // check<uint8_t>(" 42", 0);
  57. check<uint8_t>("x42", 0);
  58. check<uint8_t>("-1", 255);
  59. check<uint8_t>("256", 0);
  60. }
  61. TEST_(uint16_t) {
  62. check<uint16_t>("0", 0);
  63. check<uint16_t>("65535", 65535);
  64. check<uint16_t>("+65535", 65535);
  65. check<uint16_t>("3.14", 3);
  66. // check<uint16_t>(" 42", 0);
  67. check<uint16_t>("x42", 0);
  68. check<uint16_t>("-1", 65535);
  69. check<uint16_t>("65536", 0);
  70. }