// ArduinoJson - https://arduinojson.org // Copyright © 2014-2025, Benoit BLANCHON // MIT License #include #include #include using namespace ArduinoJson::detail; class EmptyClass {}; enum EmptyEnum {}; TEST_CASE("Polyfills/type_traits") { SECTION("is_base_of") { REQUIRE_FALSE( static_cast(is_base_of::value)); REQUIRE( static_cast(is_base_of::value)); } SECTION("is_array") { REQUIRE_FALSE(is_array::value); REQUIRE(is_array::value); REQUIRE(is_array::value); } SECTION("is_const") { CHECK(is_const::value == false); CHECK(is_const::value == true); } SECTION("is_integral") { CHECK(is_integral::value == false); CHECK(is_integral::value == false); CHECK(is_integral::value == false); CHECK(is_integral::value == false); CHECK(is_integral::value == false); CHECK(is_integral::value == false); CHECK(is_integral::value == false); CHECK(is_integral::value == false); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); CHECK(is_integral::value == true); } SECTION("is_signed") { CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == false); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == false); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == false); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == true); CHECK(is_signed::value == false); } SECTION("is_unsigned") { CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == false); CHECK(is_unsigned::value == false); CHECK(is_unsigned::value == false); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == false); CHECK(is_unsigned::value == false); CHECK(is_unsigned::value == false); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == false); CHECK(is_unsigned::value == false); CHECK(is_unsigned::value == false); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == true); CHECK(is_unsigned::value == false); CHECK(is_unsigned::value == false); CHECK(is_unsigned::value == false); } SECTION("is_floating_point") { CHECK(is_floating_point::value == false); CHECK(is_floating_point::value == true); CHECK(is_floating_point::value == true); CHECK(is_floating_point::value == true); CHECK(is_floating_point::value == true); CHECK(is_floating_point::value == true); CHECK(is_floating_point::value == true); CHECK(is_floating_point::value == true); CHECK(is_floating_point::value == true); } SECTION("is_convertible") { CHECK(is_convertible::value == true); CHECK(is_convertible::value == true); CHECK(is_convertible::value == true); CHECK(is_convertible::value == false); CHECK(is_convertible::value == false); CHECK(is_convertible::value == false); CHECK(is_convertible::value == false); CHECK(is_convertible::value == true); CHECK(is_convertible::value == true); CHECK(is_convertible::value == true); CHECK(is_convertible, JsonVariantConst>::value == true); CHECK(is_convertible::value == true); CHECK(is_convertible::value == true); CHECK(is_convertible, JsonVariantConst>::value == true); CHECK(is_convertible::value == true); CHECK(is_convertible::value == true); } SECTION("is_class") { CHECK(is_class::value == false); CHECK(is_class::value == false); CHECK(is_class::value == false); CHECK(is_class::value == true); } SECTION("is_enum") { CHECK(is_enum::value == false); CHECK(is_enum::value == true); CHECK(is_enum::value == false); CHECK(is_enum::value == false); CHECK(is_enum::value == false); CHECK(is_enum::value == false); } SECTION("remove_cv") { CHECK(is_same, int>::value); CHECK(is_same, int>::value); CHECK(is_same, int>::value); CHECK(is_same, int>::value); CHECK(is_same, decltype("toto")>::value); } SECTION("decay") { CHECK(is_same, int>::value); CHECK(is_same, int>::value); CHECK(is_same, int>::value); CHECK(is_same, int*>::value); CHECK(is_same, int*>::value); CHECK(is_same, const char*>::value); } } TEST_CASE("is_std_string") { REQUIRE(is_std_string::value == true); REQUIRE(is_std_string::value == false); }