summaryrefslogtreecommitdiff
path: root/Tests/AK
diff options
context:
space:
mode:
authorTimothy Flynn <trflynn89@pm.me>2022-12-23 09:18:15 -0500
committerAndreas Kling <kling@serenityos.org>2022-12-26 09:36:16 +0100
commitd2a304ae87bd89bb0d3c99d0d04dff976b7d7f98 (patch)
tree7a57f2e88e99266c854f1b60663b5404ecd726a0 /Tests/AK
parent4fec9540ec865a52070770a3a872e1fa7cc8ccc6 (diff)
downloadserenity-d2a304ae87bd89bb0d3c99d0d04dff976b7d7f98.zip
AK: Specialize TypeList for Variant types
This allows callers to use the following semantics: using MyVariant = Variant<Empty, int>; template<typename T> size_t size() { return TypeList<T>::size; } auto s = size<MyVariant>(); This will be needed for an upcoming IPC change, which will result in us knowing the Variant type, but not the underlying variadic types that the Variant holds.
Diffstat (limited to 'Tests/AK')
-rw-r--r--Tests/AK/TestVariant.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/Tests/AK/TestVariant.cpp b/Tests/AK/TestVariant.cpp
index 37bbf646cd..88a3e5fb7d 100644
--- a/Tests/AK/TestVariant.cpp
+++ b/Tests/AK/TestVariant.cpp
@@ -260,3 +260,16 @@ TEST_CASE(default_empty)
EXPECT(my_variant.has<Empty>());
EXPECT(!my_variant.has<int>());
}
+
+TEST_CASE(type_list_specialization)
+{
+ EXPECT_EQ((TypeList<Variant<Empty>>::size), 1u);
+ EXPECT_EQ((TypeList<Variant<Empty, int>>::size), 2u);
+ EXPECT_EQ((TypeList<Variant<Empty, int, String>>::size), 3u);
+
+ using MyVariant = Variant<Empty, int, String>;
+ using MyList = TypeList<MyVariant>;
+ EXPECT((IsSame<typename MyList::template Type<0>, Empty>));
+ EXPECT((IsSame<typename MyList::template Type<1>, int>));
+ EXPECT((IsSame<typename MyList::template Type<2>, String>));
+}