TypeTraits.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // ArduinoJson - arduinojson.org
  2. // Copyright Benoit Blanchon 2014-2018
  3. // MIT License
  4. #include <ArduinoJson.h>
  5. #include <catch.hpp>
  6. using namespace ARDUINOJSON_NAMESPACE;
  7. TEST_CASE("Polyfills/type_traits") {
  8. SECTION("is_base_of") {
  9. REQUIRE_FALSE(
  10. static_cast<bool>(is_base_of<std::istream, std::ostringstream>::value));
  11. REQUIRE(
  12. static_cast<bool>(is_base_of<std::istream, std::istringstream>::value));
  13. REQUIRE(static_cast<bool>(
  14. is_base_of<JsonVariantBase<JsonObjectSubscript<const char*> >,
  15. JsonObjectSubscript<const char*> >::value));
  16. }
  17. SECTION("is_array") {
  18. REQUIRE_FALSE((is_array<const char*>::value));
  19. REQUIRE((is_array<const char[]>::value));
  20. REQUIRE((is_array<const char[10]>::value));
  21. }
  22. SECTION("is_const") {
  23. CHECK(is_const<char>::value == false);
  24. CHECK(is_const<const char>::value == true);
  25. }
  26. SECTION("is_signed") {
  27. CHECK(is_signed<char>::value == true);
  28. CHECK(is_signed<signed char>::value == true);
  29. CHECK(is_signed<signed int>::value == true);
  30. CHECK(is_signed<signed short>::value == true);
  31. CHECK(is_signed<signed long>::value == true);
  32. CHECK(is_signed<float>::value == true);
  33. CHECK(is_signed<double>::value == true);
  34. CHECK(is_signed<bool>::value == false);
  35. }
  36. SECTION("is_unsigned") {
  37. CHECK(is_unsigned<unsigned char>::value == true);
  38. CHECK(is_unsigned<unsigned int>::value == true);
  39. CHECK(is_unsigned<unsigned short>::value == true);
  40. CHECK(is_unsigned<unsigned long>::value == true);
  41. CHECK(is_unsigned<bool>::value == true);
  42. CHECK(is_unsigned<char>::value == false);
  43. CHECK(is_unsigned<float>::value == false);
  44. CHECK(is_unsigned<double>::value == false);
  45. }
  46. SECTION("IsVisitable") {
  47. CHECK(IsVisitable<DeserializationError>::value == false);
  48. CHECK(IsVisitable<JsonPair>::value == false);
  49. CHECK(IsVisitable<JsonVariant>::value == true);
  50. CHECK(IsVisitable<JsonVariantConst>::value == true);
  51. CHECK(IsVisitable<JsonArray>::value == true);
  52. CHECK(IsVisitable<JsonArraySubscript>::value == true);
  53. CHECK(IsVisitable<JsonArrayConst>::value == true);
  54. CHECK(IsVisitable<JsonObject>::value == true);
  55. CHECK(IsVisitable<JsonObjectSubscript<const char*> >::value == true);
  56. CHECK(IsVisitable<JsonObjectConst>::value == true);
  57. CHECK(IsVisitable<DynamicJsonDocument>::value == true);
  58. CHECK(IsVisitable<StaticJsonDocument<10> >::value == true);
  59. }
  60. }