From ad57e3b23852a34c362000e507c0fbe5d29351bf Mon Sep 17 00:00:00 2001 From: Alper Yoney Date: Tue, 28 Jan 2025 15:17:59 -0800 Subject: [PATCH] Replace same_tag with std::is_same_v Summary: Replace `test::same_tag<>` with `std::is_same_v<>` Reviewed By: Mizuchi Differential Revision: D68788509 fbshipit-source-id: 349ce7237ac8faa7d9e0bfc350face95ab263831 --- .../thrift/lib/cpp2/type/NativeTypeTest.cpp | 42 ++--- .../src/thrift/lib/cpp2/type/TagTest.cpp | 103 ++++++------ .../thrift/src/thrift/lib/cpp2/type/Testing.h | 10 -- .../src/thrift/test/reflection/FieldsTest.cpp | 157 ++++++++++-------- 4 files changed, 167 insertions(+), 145 deletions(-) diff --git a/third-party/thrift/src/thrift/lib/cpp2/type/NativeTypeTest.cpp b/third-party/thrift/src/thrift/lib/cpp2/type/NativeTypeTest.cpp index 1ccc573d98c8b..634feae03c426 100644 --- a/third-party/thrift/src/thrift/lib/cpp2/type/NativeTypeTest.cpp +++ b/third-party/thrift/src/thrift/lib/cpp2/type/NativeTypeTest.cpp @@ -41,17 +41,17 @@ TEST(NativeTypeTest, UndefinedOverloading) { TEST(NativeTypeTest, Void) { static_assert(std::is_same_v>); - static_assert(test::same_tag>); - static_assert(test::same_tag>); + static_assert(std::is_same_v>); + static_assert(std::is_same_v>); } TEST(NativeTypeTest, Bool) { static_assert(std::is_same_v>); - static_assert(test::same_tag>); + static_assert(std::is_same_v>); } TEST(InferTagTest, Tag) { - static_assert(test::same_tag>); + static_assert(std::is_same_v>); } TEST(InferTagTest, Integer) { @@ -59,14 +59,14 @@ TEST(InferTagTest, Integer) { static_assert(std::is_same_v>); static_assert(std::is_same_v>); static_assert(std::is_same_v>); - static_assert(test::same_tag>); - static_assert(test::same_tag>); - static_assert(test::same_tag>); - static_assert(test::same_tag>); - static_assert(test::same_tag, infer_tag>); - static_assert(test::same_tag, infer_tag>); - static_assert(test::same_tag, infer_tag>); - static_assert(test::same_tag, infer_tag>); + static_assert(std::is_same_v>); + static_assert(std::is_same_v>); + static_assert(std::is_same_v>); + static_assert(std::is_same_v>); + static_assert(std::is_same_v, infer_tag>); + static_assert(std::is_same_v, infer_tag>); + static_assert(std::is_same_v, infer_tag>); + static_assert(std::is_same_v, infer_tag>); static_assert(type::is_a_v, byte_t>); static_assert(type::is_a_v, byte_t>); @@ -86,8 +86,8 @@ TEST(InferTagTest, Integer) { TEST(InferTagTest, Floating) { static_assert(std::is_same_v>); static_assert(std::is_same_v>); - static_assert(test::same_tag>); - static_assert(test::same_tag>); + static_assert(std::is_same_v>); + static_assert(std::is_same_v>); } TEST(InferTagTest, Strings) { @@ -99,16 +99,16 @@ TEST(InferTagTest, Strings) { TEST(InferTagTest, Containers) { static_assert( - test::same_tag>, std::vector>); + std::is_same_v>, std::vector>); static_assert( - test::same_tag, infer_tag>>); + std::is_same_v, infer_tag>>); static_assert( - test::same_tag>, std::set>); - static_assert(test::same_tag, infer_tag>>); - static_assert(test::same_tag< + std::is_same_v>, std::set>); + static_assert(std::is_same_v, infer_tag>>); + static_assert(std::is_same_v< native_type>, std::map>); - static_assert(test::same_tag< + static_assert(std::is_same_v< map, infer_tag>>); } @@ -116,7 +116,7 @@ TEST(InferTagTest, Containers) { TEST(InferTagTest, Wrap) { struct FooStruct {}; struct Foo : detail::Wrap> {}; - static_assert(test::same_tag< + static_assert(std::is_same_v< infer_tag, adapted, struct_t>>); } diff --git a/third-party/thrift/src/thrift/lib/cpp2/type/TagTest.cpp b/third-party/thrift/src/thrift/lib/cpp2/type/TagTest.cpp index e9e85a2cb667b..85de1a6080d42 100644 --- a/third-party/thrift/src/thrift/lib/cpp2/type/TagTest.cpp +++ b/third-party/thrift/src/thrift/lib/cpp2/type/TagTest.cpp @@ -18,6 +18,7 @@ #include #include +#include #include #include @@ -77,96 +78,104 @@ cpp_type, std::unordered_set> testOverload( map testOverload(map); namespace { -using test::same_tag; using test::TestAdapter; // Test that type tags can be used to find an overload in ~constant time // by the compiler. -static_assert(same_tag); -static_assert(same_tag); -static_assert(same_tag); -static_assert(same_tag); -static_assert(same_tag); -static_assert(same_tag); -static_assert(same_tag); -static_assert(same_tag); -static_assert(same_tag); -static_assert(same_tag); -static_assert(same_tag); - -static_assert(same_tag); -static_assert(same_tag{}))>); -static_assert(same_tag< +static_assert(std::is_same_v); +static_assert(std::is_same_v); +static_assert(std::is_same_v); +static_assert(std::is_same_v); +static_assert(std::is_same_v); +static_assert(std::is_same_v); +static_assert(std::is_same_v); +static_assert( + std::is_same_v); +static_assert(std::is_same_v); +static_assert(std::is_same_v); +static_assert(std::is_same_v); + +static_assert(std::is_same_v); +static_assert( + std::is_same_v{}))>); +static_assert(std::is_same_v< enum_t, decltype(testOverload(enum_t{}))>); -static_assert(same_tag); -static_assert(same_tag{}))>); -static_assert(same_tag< +static_assert(std::is_same_v); +static_assert( + std::is_same_v{}))>); +static_assert(std::is_same_v< struct_t, decltype(testOverload(struct_t{}))>); -static_assert(same_tag); +static_assert(std::is_same_v); static_assert( - same_tag{}))>); -static_assert(same_tag< + std::is_same_v{}))>); +static_assert(std::is_same_v< union_t, decltype(testOverload(union_t{}))>); -static_assert(same_tag); static_assert( - same_tag{}))>); -static_assert(same_tag< + std::is_same_v); +static_assert(std::is_same_v< + struct_except_c, + decltype(testOverload(exception_t{}))>); +static_assert(std::is_same_v< exception_t, decltype(testOverload(exception_t{}))>); -static_assert(same_tag); -static_assert(same_tag{}))>); -static_assert(same_tag< +static_assert(std::is_same_v); +static_assert(std::is_same_v{}))>); +static_assert(std::is_same_v< cpp_type, std::list>, decltype(testOverload( cpp_type, std::list>{}))>); -static_assert(same_tag< +static_assert(std::is_same_v< cpp_type, std::list>, decltype(testOverload( cpp_type, std::list>{}))>); -static_assert(same_tag); -static_assert(same_tag{}))>); +static_assert(std::is_same_v); static_assert( - same_tag{}))>); -static_assert(same_tag< + std::is_same_v{}))>); +static_assert( + std::is_same_v{}))>); +static_assert(std::is_same_v< cpp_type, std::unordered_set>, decltype(testOverload( cpp_type, std::unordered_set>{}))>); -static_assert(same_tag); -static_assert(same_tag{}))>); +static_assert(std::is_same_v); +static_assert( + std::is_same_v{}))>); static_assert( - same_tag{}))>); + std::is_same_v{}))>); static_assert( - same_tag{}))>); -static_assert(same_tag< + std::is_same_v{}))>); +static_assert(std::is_same_v< map, decltype(testOverload(map{}))>); // Adapted types are convertable to the underlying tag. -static_assert( - same_tag{}))>); -static_assert(same_tag< +static_assert(std::is_same_v< + void_t, + decltype(testOverload(adapted{}))>); +static_assert(std::is_same_v< list_c, decltype(testOverload(adapted>{}))>); // CppType types are convertable to the underlying tag. -static_assert( - same_tag{}))>); -static_assert(same_tag< +static_assert(std::is_same_v< + void_t, + decltype(testOverload(cpp_type{}))>); +static_assert(std::is_same_v< list_c, decltype(testOverload(cpp_type>{}))>); -static_assert(same_tag); +static_assert(std::is_same_v); static_assert( - same_tag{}))>); -static_assert(same_tag< + std::is_same_v{}))>); +static_assert(std::is_same_v< service_t, decltype(testOverload(service_t{}))>); diff --git a/third-party/thrift/src/thrift/lib/cpp2/type/Testing.h b/third-party/thrift/src/thrift/lib/cpp2/type/Testing.h index 033412eb4f81e..1456b6a3d5083 100644 --- a/third-party/thrift/src/thrift/lib/cpp2/type/Testing.h +++ b/third-party/thrift/src/thrift/lib/cpp2/type/Testing.h @@ -29,16 +29,6 @@ namespace apache::thrift::test { -// Helper to check if the tags matches. -// For example: -// static_assert(same_tag); -// Will produce an error message similar to: -// static assertion failed due to requirement -// test::same_tag -// static_assert(test::same_tag); -template -constexpr bool same_tag = std::is_same_v; - template struct TestValue { T value; diff --git a/third-party/thrift/src/thrift/test/reflection/FieldsTest.cpp b/third-party/thrift/src/thrift/test/reflection/FieldsTest.cpp index ef37444680037..4511506f12832 100644 --- a/third-party/thrift/src/thrift/test/reflection/FieldsTest.cpp +++ b/third-party/thrift/src/thrift/test/reflection/FieldsTest.cpp @@ -40,15 +40,17 @@ TEST(FieldsTest, Get) { EXPECT_EQ((op::get, Struct>(s)), 10); op::get, Struct>(s) = 20; EXPECT_EQ(*s.fieldA(), 20); - test:: - same_tag, Struct>(s))>; + static_assert(std::is_same_v< + decltype(s.fieldA()), + decltype(op::get, Struct>(s))>); s.fieldE()->ui_ref() = 10; EXPECT_EQ((op::get, Struct>(s)->ui_ref()), 10); op::get, Struct>(s)->us_ref() = "20"; EXPECT_EQ(s.fieldE()->us_ref(), "20"); - test:: - same_tag, Struct>(s))>; + static_assert(std::is_same_v< + decltype(s.fieldE()), + decltype(op::get, Struct>(s))>); } TEST(FieldsTest, field_id_by_ordinal) { @@ -64,8 +66,9 @@ TEST(UnionFieldsTest, Get) { u.ui_ref() = 10; EXPECT_EQ((op::get, Union>(u)), 10); EXPECT_THROW((*op::get, Union>(u)), bad_field_access); - test:: - same_tag, Union>(u))>; + static_assert(std::is_same_v< + decltype(u.ui_ref()), + decltype(op::get, Union>(u))>); EXPECT_EQ(&(*op::get, Union>(u)), &*u.ui_ref()); op::get, Union>(u) = 20; @@ -74,8 +77,9 @@ TEST(UnionFieldsTest, Get) { u.us_ref() = "foo"; EXPECT_EQ((*op::get, Union>(u)), "foo"); - test:: - same_tag, Union>(u))>; + static_assert(std::is_same_v< + decltype(u.us_ref()), + decltype(op::get, Union>(u))>); EXPECT_THROW((*op::get, Union>(u)), bad_field_access); } @@ -89,55 +93,60 @@ template < class FieldTag> void checkField(const char* identName) { if constexpr (Ordinal::value != Ordinal{}) { - test::same_tag>; + static_assert( + std::is_same_v>); } - test::same_tag>; - test::same_tag>; - test::same_tag>; - test::same_tag>; + static_assert( + std::is_same_v>); + static_assert(std::is_same_v>); + static_assert(std::is_same_v>); + static_assert( + std::is_same_v>); if constexpr (is_type_tag_unique) { - test::same_tag>; + static_assert( + std::is_same_v>); } - test::same_tag, Ordinal>; - test::same_tag, Id>; - test::same_tag, TypeTag>; - test::same_tag, Ident>; - test::same_tag, FieldTag>; + static_assert(std::is_same_v, Ordinal>); + static_assert(std::is_same_v, Id>); + static_assert(std::is_same_v, TypeTag>); + static_assert(std::is_same_v, Ident>); + static_assert(std::is_same_v, FieldTag>); EXPECT_EQ((op::get_name_v), identName); - test::same_tag, Ordinal>; - test::same_tag, Id>; - test::same_tag, TypeTag>; - test::same_tag, Ident>; - test::same_tag, FieldTag>; + static_assert(std::is_same_v, Ordinal>); + static_assert(std::is_same_v, Id>); + static_assert(std::is_same_v, TypeTag>); + static_assert(std::is_same_v, Ident>); + static_assert(std::is_same_v, FieldTag>); EXPECT_EQ((op::get_name_v), identName); if constexpr (is_type_tag_unique && !std::is_void_v) { - test::same_tag, Ordinal>; - test::same_tag, Id>; - test::same_tag, TypeTag>; - test::same_tag, Ident>; - test::same_tag, FieldTag>; + static_assert(std::is_same_v, Ordinal>); + static_assert(std::is_same_v, Id>); + static_assert(std::is_same_v, TypeTag>); + static_assert(std::is_same_v, Ident>); + static_assert(std::is_same_v, FieldTag>); EXPECT_EQ((op::get_name_v), identName); } if constexpr (!std::is_void_v) { - test::same_tag, Ordinal>; - test::same_tag, Id>; - test::same_tag, TypeTag>; - test::same_tag, Ident>; - test::same_tag, FieldTag>; + static_assert(std::is_same_v, Ordinal>); + static_assert(std::is_same_v, Id>); + static_assert(std::is_same_v, TypeTag>); + static_assert(std::is_same_v, Ident>); + static_assert(std::is_same_v, FieldTag>); EXPECT_EQ((op::get_name_v), identName); } if constexpr (!std::is_void_v) { - test::same_tag, Ordinal>; - test::same_tag, Id>; - test::same_tag, TypeTag>; - test::same_tag, Ident>; - test::same_tag, FieldTag>; + static_assert(std::is_same_v, Ordinal>); + static_assert(std::is_same_v, Id>); + static_assert(std::is_same_v, TypeTag>); + static_assert(std::is_same_v, Ident>); + static_assert( + std::is_same_v, FieldTag>); EXPECT_EQ((op::get_name_v), identName); } } @@ -273,29 +282,40 @@ TEST(FieldsTest, IsReflectionMetadata) { TEST(FieldsTest, NotFoundFieldInfo) { using Struct = test_cpp2::cpp_reflection::struct3; - test::same_tag>, field_ordinal<0>>; - test::same_tag>, field_id<0>>; - test::same_tag>, void>; - test::same_tag>, void>; - test::same_tag>, void>; - - test::same_tag>, field_ordinal<0>>; - test::same_tag>, field_id<0>>; - test::same_tag>, void>; - test::same_tag>, void>; - test::same_tag>, void>; - - test::same_tag, field_ordinal<0>>; - test::same_tag, field_id<0>>; - test::same_tag, void>; - test::same_tag, void>; - test::same_tag, void>; - - test::same_tag, field_ordinal<0>>; - test::same_tag, field_id<0>>; - test::same_tag, void>; - test::same_tag, void>; - test::same_tag, void>; + static_assert(std::is_same_v< + op::get_ordinal>, + field_ordinal<0>>); + static_assert( + std::is_same_v>, field_id<0>>); + static_assert( + std::is_same_v>, void>); + static_assert(std::is_same_v>, void>); + static_assert( + std::is_same_v>, void>); + + static_assert( + std::is_same_v>, field_ordinal<0>>); + static_assert( + std::is_same_v>, field_id<0>>); + static_assert(std::is_same_v>, void>); + static_assert(std::is_same_v>, void>); + static_assert(std::is_same_v>, void>); + + static_assert( + std::is_same_v, field_ordinal<0>>); + static_assert( + std::is_same_v, field_id<0>>); + static_assert(std::is_same_v, void>); + static_assert(std::is_same_v, void>); + static_assert(std::is_same_v, void>); + + static_assert( + std::is_same_v, field_ordinal<0>>); + static_assert( + std::is_same_v, field_id<0>>); + static_assert(std::is_same_v, void>); + static_assert(std::is_same_v, void>); + static_assert(std::is_same_v, void>); } template @@ -306,11 +326,14 @@ bool isIdentTag(folly::tag_t) { TEST(FieldsTest, HelperAPIs) { using Struct = test_cpp2::cpp_reflection::struct3; - test::same_tag>, std::int32_t>; - test::same_tag, std::int32_t>; - test::same_tag< - op::get_native_type>, - std::deque>; + static_assert(std::is_same_v< + op::get_native_type>, + std::int32_t>); + static_assert( + std::is_same_v, std::int32_t>); + static_assert(std::is_same_v< + op::get_native_type>, + std::deque>); EXPECT_EQ((op::get_field_id_v>), FieldId{2}); EXPECT_EQ((op::get_ordinal_v>), FieldOrdinal{1});