mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-22 10:29:35 +00:00
Test the polymorphic behavior of this utility.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194320 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8caea7237a
commit
c197a3ab4d
@ -22,7 +22,8 @@ struct S {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// A function that forces the return of a copy.
|
// A function that forces the return of a copy.
|
||||||
polymorphic_ptr<S> dummy_copy(const polymorphic_ptr<S> &arg) { return arg; }
|
template <typename T>
|
||||||
|
T dummy_copy(const T &arg) { return arg; }
|
||||||
|
|
||||||
TEST(polymorphic_ptr_test, Basic) {
|
TEST(polymorphic_ptr_test, Basic) {
|
||||||
polymorphic_ptr<S> null;
|
polymorphic_ptr<S> null;
|
||||||
@ -83,4 +84,35 @@ TEST(polymorphic_ptr_test, Basic) {
|
|||||||
EXPECT_EQ(42, p3->x);
|
EXPECT_EQ(42, p3->x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct Base {
|
||||||
|
virtual ~Base() {}
|
||||||
|
virtual Base *clone() = 0;
|
||||||
|
virtual StringRef name() { return "Base"; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DerivedA : Base {
|
||||||
|
virtual DerivedA *clone() { return new DerivedA(); }
|
||||||
|
virtual StringRef name() { return "DerivedA"; }
|
||||||
|
};
|
||||||
|
struct DerivedB : Base {
|
||||||
|
virtual DerivedB *clone() { return new DerivedB(); }
|
||||||
|
virtual StringRef name() { return "DerivedB"; }
|
||||||
|
};
|
||||||
|
|
||||||
|
TEST(polymorphic_ptr_test, Polymorphism) {
|
||||||
|
polymorphic_ptr<Base> a(new DerivedA());
|
||||||
|
polymorphic_ptr<Base> b(new DerivedB());
|
||||||
|
|
||||||
|
EXPECT_EQ("DerivedA", a->name());
|
||||||
|
EXPECT_EQ("DerivedB", b->name());
|
||||||
|
|
||||||
|
polymorphic_ptr<Base> copy = dummy_copy(a);
|
||||||
|
EXPECT_NE(a, copy);
|
||||||
|
EXPECT_EQ("DerivedA", copy->name());
|
||||||
|
|
||||||
|
copy = dummy_copy(b);
|
||||||
|
EXPECT_NE(b, copy);
|
||||||
|
EXPECT_EQ("DerivedB", copy->name());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user