parseInteger.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // ArduinoJson - arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2019
  3. // MIT License
  4. #include <stdint.h>
  5. #include <ArduinoJson/Numbers/parseInteger.hpp>
  6. #include <catch.hpp>
  7. using namespace ARDUINOJSON_NAMESPACE;
  8. template <typename T>
  9. void check(const char* input, T expected) {
  10. CAPTURE(input);
  11. T actual = parseInteger<T>(input);
  12. REQUIRE(expected == actual);
  13. }
  14. TEST_CASE("parseInteger<int8_t>()") {
  15. check<int8_t>("-128", -128);
  16. check<int8_t>("127", 127);
  17. check<int8_t>("+127", 127);
  18. check<int8_t>("3.14", 3);
  19. check<int8_t>("x42", 0);
  20. check<int8_t>("128", 0); // overflow
  21. check<int8_t>("-129", 0); // overflow
  22. }
  23. TEST_CASE("parseInteger<int16_t>()") {
  24. check<int16_t>("-32768", -32768);
  25. check<int16_t>("32767", 32767);
  26. check<int16_t>("+32767", 32767);
  27. check<int16_t>("3.14", 3);
  28. check<int16_t>("x42", 0);
  29. check<int16_t>("-32769", 0); // overflow
  30. check<int16_t>("32768", 0); // overflow
  31. }
  32. TEST_CASE("parseInteger<int32_t>()") {
  33. check<int32_t>("-2147483648", (-2147483647 - 1));
  34. check<int32_t>("2147483647", 2147483647);
  35. check<int32_t>("+2147483647", 2147483647);
  36. check<int32_t>("3.14", 3);
  37. check<int32_t>("x42", 0);
  38. check<int32_t>("-2147483649", 0); // overflow
  39. check<int32_t>("2147483648", 0); // overflow
  40. }
  41. TEST_CASE("parseInteger<uint8_t>()") {
  42. check<uint8_t>("0", 0);
  43. check<uint8_t>("255", 255);
  44. check<uint8_t>("+255", 255);
  45. check<uint8_t>("3.14", 3);
  46. check<uint8_t>("x42", 0);
  47. check<uint8_t>("-1", 0);
  48. check<uint8_t>("256", 0);
  49. }
  50. TEST_CASE("parseInteger<uint16_t>()") {
  51. check<uint16_t>("0", 0);
  52. check<uint16_t>("65535", 65535);
  53. check<uint16_t>("+65535", 65535);
  54. check<uint16_t>("3.14", 3);
  55. // check<uint16_t>(" 42", 0);
  56. check<uint16_t>("x42", 0);
  57. check<uint16_t>("-1", 0);
  58. check<uint16_t>("65536", 0);
  59. }