#include #include #include #include #include namespace { using sdbusplus::utility::array_to_ptr_t; using std::is_same_v; TEST(TypeTraits, Basic) { static_assert(is_same_v>, "array_to_ptr_t != char"); static_assert(is_same_v>, "array_to_ptr_t != char*"); static_assert(is_same_v>, "array_to_ptr_t != char*"); static_assert(is_same_v>, "array_to_ptr_t != char[100]"); } TEST(TypeTraits, HasMemberFind) { using sdbusplus::utility::has_member_find_v; using namespace testing; ASSERT_THAT((has_member_find_v>), Eq(true)); ASSERT_THAT((has_member_find_v>>), Eq(false)); struct Foo { using value_type = std::pair; void find(std::tuple_element_t<0, value_type>) {} }; struct Bar {}; ASSERT_THAT(has_member_find_v, Eq(true)); ASSERT_THAT(has_member_find_v, Eq(true)); ASSERT_THAT(has_member_find_v, Eq(true)); ASSERT_THAT(has_member_find_v, Eq(false)); } TEST(TypeTraits, HasMemberContains) { using sdbusplus::utility::has_member_contains_v; using namespace testing; // std::map has member_contains from c++20 ASSERT_THAT((has_member_contains_v>), Eq(true)); ASSERT_THAT( (has_member_contains_v>>), Eq(false)); struct Foo { using value_type = std::pair; void contains(std::tuple_element_t<0, value_type>) {} }; struct Bar {}; ASSERT_THAT(has_member_contains_v, Eq(true)); ASSERT_THAT(has_member_contains_v, Eq(true)); ASSERT_THAT(has_member_contains_v, Eq(true)); ASSERT_THAT(has_member_contains_v, Eq(false)); } TEST(TypeTraits, IsOptional) { using sdbusplus::utility::is_optional; using sdbusplus::utility::is_optional_v; ASSERT_TRUE(is_optional>::value); ASSERT_TRUE(is_optional&>::value); ASSERT_FALSE(is_optional::value); ASSERT_TRUE(is_optional_v>); ASSERT_TRUE(is_optional_v&>); ASSERT_FALSE(is_optional_v); } // Tests for dedup_variant. static_assert(std::is_same_v, sdbusplus::utility::dedup_variant_t>); static_assert( std::is_same_v, sdbusplus::utility::dedup_variant_t>); static_assert(std::is_same_v< std::variant, sdbusplus::utility::dedup_variant_t>); // Tests for merge_variants. static_assert( std::is_same_v, sdbusplus::utility::merge_variants_t>>); static_assert(std::is_same_v, sdbusplus::utility::merge_variants_t< std::variant, std::variant>>); } // namespace