@@ -4,11 +4,90 @@ import CppUtils;
44
55namespace CppUtils::UnitTest::Type::Mapping
66{
7- using Map = ::CppUtils::Type::Mapping<
8- ::CppUtils::Type::Pair<0, 100>,
9- ::CppUtils::Type::Pair<1, 200>,
10- ::CppUtils::Type::Pair<2, 300>>;
7+ namespace Map
8+ {
9+ using Map = ::CppUtils::Type::Mapping<
10+ ::CppUtils::Type::Pair<0, 100>,
11+ ::CppUtils::Type::Pair<1, 200>,
12+ ::CppUtils::Type::Pair<2, 300>>;
1113
12- static_assert(Map::toRhs<1>() == 200);
13- static_assert(Map::toLhs<300>() == 2);
14+ static_assert(std::get<0>(Map::toRhs<0>()) == 100);
15+ static_assert(std::get<0>(Map::toRhs<1>()) == 200);
16+ static_assert(std::get<0>(Map::toRhs<2>()) == 300);
17+
18+ static_assert(Map::toSingleRhs<0>() == 100);
19+ static_assert(Map::toSingleRhs<1>() == 200);
20+ static_assert(Map::toSingleRhs<2>() == 300);
21+
22+ static_assert(Map::toLhs<100>() == 0);
23+ static_assert(Map::toLhs<200>() == 1);
24+ static_assert(Map::toLhs<300>() == 2);
25+
26+ static_assert(Map::contains<100>(Map::toRhs<0>()));
27+ static_assert(Map::contains<200>(Map::toRhs<1>()));
28+ static_assert(not Map::contains<1'000>(Map::toRhs<2>()));
29+ }
30+
31+ namespace MultiMap
32+ {
33+ using MultiMap = ::CppUtils::Type::Mapping<
34+ ::CppUtils::Type::Pair<0, 1, 2, 3>>;
35+
36+ static_assert(std::tuple_size_v<decltype(MultiMap::toRhs<0>())> == 3);
37+ static_assert(std::get<0>(MultiMap::toRhs<0>()) == 1);
38+ static_assert(std::get<1>(MultiMap::toRhs<0>()) == 2);
39+ static_assert(std::get<2>(MultiMap::toRhs<0>()) == 3);
40+
41+ static_assert(MultiMap::toLhs<1>() == 0);
42+ static_assert(MultiMap::toLhs<2>() == 0);
43+ static_assert(MultiMap::toLhs<3>() == 0);
44+
45+ static_assert(MultiMap::contains<1>(MultiMap::toRhs<0>()));
46+ static_assert(MultiMap::contains<2>(MultiMap::toRhs<0>()));
47+ static_assert(not MultiMap::contains<10>(MultiMap::toRhs<0>()));
48+ }
49+
50+ namespace Boolean
51+ {
52+ using BooleanMap = ::CppUtils::Type::Mapping<
53+ ::CppUtils::Type::Pair<0, true>,
54+ ::CppUtils::Type::Pair<1, false>>;
55+
56+ static_assert(BooleanMap::toSingleRhs<0>());
57+ static_assert(not BooleanMap::toSingleRhs<1>());
58+
59+ static_assert(BooleanMap::contains<true>(BooleanMap::toRhs<0>()));
60+ static_assert(BooleanMap::contains<false>(BooleanMap::toRhs<1>()));
61+ static_assert(not BooleanMap::contains<true>(BooleanMap::toRhs<1>()));
62+ }
63+
64+ namespace FunctionPointer
65+ {
66+ constexpr auto function(int x) -> int
67+ {
68+ return x * 2;
69+ }
70+
71+ using FunctionMap = ::CppUtils::Type::Mapping<
72+ ::CppUtils::Type::Pair<0, &function>>;
73+
74+ static_assert(FunctionMap::toSingleRhs<0>() == &function);
75+
76+ static_assert(FunctionMap::contains<&function>(FunctionMap::toRhs<0>()));
77+ }
78+
79+ namespace MemberFunctionPointer
80+ {
81+ struct Struct final
82+ {
83+ int value;
84+ };
85+
86+ using MemberMap = ::CppUtils::Type::Mapping<
87+ ::CppUtils::Type::Pair<0, &Struct::value>>;
88+
89+ static_assert(MemberMap::toSingleRhs<0>() == &Struct::value);
90+
91+ static_assert(MemberMap::contains<&Struct::value>(MemberMap::toRhs<0>()));
92+ }
1493}
0 commit comments