8 #include <gtest/gtest.h>
18 virtual ~Base() =
default;
21 class X final :
public Base
24 ~X()
override =
default;
27 class Y final :
public Base
30 ~Y()
override =
default;
33 class Z final :
public Base
36 ~Z()
override =
default;
39 class U final :
public Base
42 ~U()
override =
default;
46 Discriminate1(
const Base & obj)
67 Discriminate2(
const Base & obj)
92 Discriminate3(
const Base & obj)
115 Discriminate4(
const Base & obj)
152 Discriminate5(
const Base & obj)
159 TEST(MatchTypeTests, TestBasicTypeMatch)
161 EXPECT_EQ(Discriminate1(X()), 0);
162 EXPECT_EQ(Discriminate1(Y()), 1);
163 EXPECT_EQ(Discriminate1(Z()), 2);
164 EXPECT_EQ(Discriminate1(U()), -1);
166 EXPECT_EQ(Discriminate2(X()), 0);
167 EXPECT_EQ(Discriminate2(Y()), 1);
168 EXPECT_EQ(Discriminate2(Z()), 2);
169 EXPECT_EQ(Discriminate2(U()), -1);
171 EXPECT_EQ(Discriminate3(X()), 0);
172 EXPECT_EQ(Discriminate3(Y()), 1);
173 EXPECT_EQ(Discriminate3(Z()), 2);
174 EXPECT_EQ(Discriminate3(U()), -1);
176 EXPECT_EQ(Discriminate4(X()), 0);
177 EXPECT_EQ(Discriminate4(Y()), 1);
178 EXPECT_EQ(Discriminate4(Z()), 2);
179 EXPECT_THROW(Discriminate4(U()), std::logic_error);
181 EXPECT_EQ(Discriminate5(X()), 0);
182 EXPECT_EQ(Discriminate5(Y()), 1);
183 EXPECT_EQ(Discriminate5(Z()), 2);
TEST(MatchTypeTests, TestBasicTypeMatch)
void MatchTypeWithDefault(T &obj, const Fns &... fns)
Pattern match over subclass type of given object with default handler.
void MatchTypeOrFail(T &obj, const Fns &... fns)
Pattern match over subclass type of given object.
void MatchType(T &obj, const Fns &... fns)
Pattern match over subclass type of given object.