Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'libcxxabi/test/dynamic_cast5.cpp')
-rw-r--r--libcxxabi/test/dynamic_cast5.cpp1321
1 files changed, 0 insertions, 1321 deletions
diff --git a/libcxxabi/test/dynamic_cast5.cpp b/libcxxabi/test/dynamic_cast5.cpp
deleted file mode 100644
index 89869698c340..000000000000
--- a/libcxxabi/test/dynamic_cast5.cpp
+++ /dev/null
@@ -1,1321 +0,0 @@
-//===------------------------- dynamic_cast5.cpp --------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include <cassert>
-
-namespace t1
-{
-
-struct A1
-{
- char _[43981];
- virtual ~A1() {}
-
- A1* getA1() {return this;}
-};
-
-struct A2
-{
- char _[34981];
- virtual ~A2() {}
-
- A2* getA2() {return this;}
-};
-
-struct A3
- : public virtual A1,
- private A2
-{
- char _[93481];
- virtual ~A3() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A3* getA3() {return this;}
-};
-
-struct A4
- : public A3,
- public A2
-{
- char _[13489];
- virtual ~A4() {}
-
- t1::A1* getA1() {return A3::getA1();}
- A2* getA2() {return A3::getA2();}
- A3* getA3() {return A3::getA3();}
- A4* getA4() {return this;}
-};
-
-struct A5
- : public A4,
- public A3
-{
- char _[13489];
- virtual ~A5() {}
-
- t1::A1* getA1() {return A4::getA1();}
- A2* getA2() {return A4::getA2();}
- A3* getA3() {return A4::getA3();}
- A4* getA4() {return A4::getA4();}
- A5* getA5() {return this;}
-};
-
-void test()
-{
- A1 a1;
- A2 a2;
- A3 a3;
- A4 a4;
- A5 a5;
-
- assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
- assert(dynamic_cast<A1*>(a2.getA2()) == 0);
- assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
- assert(dynamic_cast<A1*>(a3.getA2()) == 0);
- assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
- assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA2()) == 0);
- assert(dynamic_cast<A1*>(a4.getA3()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
- assert(dynamic_cast<A1*>(a5.getA1()) == a5.getA1());
- assert(dynamic_cast<A1*>(a5.getA2()) == 0);
- assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA1());
- assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA1());
- assert(dynamic_cast<A1*>(a5.getA5()) == a5.getA1());
-
- assert(dynamic_cast<A2*>(a1.getA1()) == 0);
- assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
- assert(dynamic_cast<A2*>(a3.getA1()) == 0);
- assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
-// assert(dynamic_cast<A2*>(a3.getA3()) == 0); // cast to private base
- assert(dynamic_cast<A2*>(a4.getA1()) == 0);
- assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
-// assert(dynamic_cast<A2*>(a4.getA3()) == 0); // cast to private base
-// assert(dynamic_cast<A2*>(a4.getA4()) == 0); // cast to ambiguous base
- assert(dynamic_cast<A2*>(a5.getA1()) == 0);
- assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
-// assert(dynamic_cast<A2*>(a5.getA3()) == 0); // cast to private base
-// assert(dynamic_cast<A2*>(a5.getA4()) == 0); // cast to ambiguous base
-// assert(dynamic_cast<A2*>(a5.getA5()) == 0); // cast to ambiguous base
-
- assert(dynamic_cast<A3*>(a1.getA1()) == 0);
- assert(dynamic_cast<A3*>(a2.getA2()) == 0);
- assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
- assert(dynamic_cast<A3*>(a3.getA2()) == 0);
- assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
- assert(dynamic_cast<A3*>(a4.getA1()) == a4.getA3());
- assert(dynamic_cast<A3*>(a4.getA2()) == 0);
- assert(dynamic_cast<A3*>(a4.getA3()) == a4.getA3());
- assert(dynamic_cast<A3*>(a4.getA4()) == a4.getA3());
- assert(dynamic_cast<A3*>(a5.getA1()) == 0);
- assert(dynamic_cast<A3*>(a5.getA2()) == 0);
- assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());
-// assert(dynamic_cast<A3*>(a5.getA5()) == 0); // cast to ambiguous base
-
- assert(dynamic_cast<A4*>(a1.getA1()) == 0);
- assert(dynamic_cast<A4*>(a2.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA1()) == 0);
- assert(dynamic_cast<A4*>(a3.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA3()) == 0);
- assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA2()) == 0);
- assert(dynamic_cast<A4*>(a4.getA3()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
- assert(dynamic_cast<A4*>(a5.getA1()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA2()) == 0);
- assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
-
- assert(dynamic_cast<A5*>(a1.getA1()) == 0);
- assert(dynamic_cast<A5*>(a2.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA1()) == 0);
- assert(dynamic_cast<A5*>(a3.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA3()) == 0);
- assert(dynamic_cast<A5*>(a4.getA1()) == 0);
- assert(dynamic_cast<A5*>(a4.getA2()) == 0);
- assert(dynamic_cast<A5*>(a4.getA3()) == 0);
- assert(dynamic_cast<A5*>(a4.getA4()) == 0);
- assert(dynamic_cast<A5*>(a5.getA1()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA2()) == 0);
- assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
-}
-
-} // t1
-
-namespace t2
-{
-
-struct A1
-{
- char _[43981];
- virtual ~A1() {}
-
- A1* getA1() {return this;}
-};
-
-struct A2
-{
- char _[34981];
- virtual ~A2() {}
-
- A2* getA2() {return this;}
-};
-
-struct A3
- : public virtual A1,
- public A2
-{
- char _[93481];
- virtual ~A3() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A3* getA3() {return this;}
-};
-
-struct A4
- : public A3,
- public A2
-{
- char _[13489];
- virtual ~A4() {}
-
- t2::A1* getA1() {return A3::getA1();}
- A2* getA2() {return A3::getA2();}
- A3* getA3() {return A3::getA3();}
- A4* getA4() {return this;}
-};
-
-struct A5
- : public A4,
- public A3
-{
- char _[13489];
- virtual ~A5() {}
-
- t2::A1* getA1() {return A4::getA1();}
- A2* getA2() {return A4::getA2();}
- A3* getA3() {return A4::getA3();}
- A4* getA4() {return A4::getA4();}
- A5* getA5() {return this;}
-};
-
-void test()
-{
- A1 a1;
- A2 a2;
- A3 a3;
- A4 a4;
- A5 a5;
-
- assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
- assert(dynamic_cast<A1*>(a2.getA2()) == 0);
- assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
- assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
- assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
- assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA3()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
- assert(dynamic_cast<A1*>(a5.getA1()) == a5.getA1());
- assert(dynamic_cast<A1*>(a5.getA2()) == a5.getA1());
- assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA1());
- assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA1());
- assert(dynamic_cast<A1*>(a5.getA5()) == a5.getA1());
-
- assert(dynamic_cast<A2*>(a1.getA1()) == 0);
- assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
- assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
- assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
- assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
- assert(dynamic_cast<A2*>(a4.getA1()) == 0);
- assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
- assert(dynamic_cast<A2*>(a4.getA3()) == a4.getA2());
-// assert(dynamic_cast<A2*>(a4.getA4()) == 0); // cast to ambiguous base
- assert(dynamic_cast<A2*>(a5.getA1()) == 0);
- assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());
-// assert(dynamic_cast<A2*>(a5.getA4()) == 0); // cast to ambiguous base
-// assert(dynamic_cast<A2*>(a5.getA5()) == 0); // cast to ambiguous base
-
- assert(dynamic_cast<A3*>(a1.getA1()) == 0);
- assert(dynamic_cast<A3*>(a2.getA2()) == 0);
- assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
- assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
- assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
- assert(dynamic_cast<A3*>(a4.getA1()) == a4.getA3());
- assert(dynamic_cast<A3*>(a4.getA2()) == a4.getA3());
- assert(dynamic_cast<A3*>(a4.getA3()) == a4.getA3());
- assert(dynamic_cast<A3*>(a4.getA4()) == a4.getA3());
- assert(dynamic_cast<A3*>(a5.getA1()) == 0);
- assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());
-// assert(dynamic_cast<A3*>(a5.getA5()) == 0); // cast to ambiguous base
-
- assert(dynamic_cast<A4*>(a1.getA1()) == 0);
- assert(dynamic_cast<A4*>(a2.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA1()) == 0);
- assert(dynamic_cast<A4*>(a3.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA3()) == 0);
- assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA3()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
- assert(dynamic_cast<A4*>(a5.getA1()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
-
- assert(dynamic_cast<A5*>(a1.getA1()) == 0);
- assert(dynamic_cast<A5*>(a2.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA1()) == 0);
- assert(dynamic_cast<A5*>(a3.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA3()) == 0);
- assert(dynamic_cast<A5*>(a4.getA1()) == 0);
- assert(dynamic_cast<A5*>(a4.getA2()) == 0);
- assert(dynamic_cast<A5*>(a4.getA3()) == 0);
- assert(dynamic_cast<A5*>(a4.getA4()) == 0);
- assert(dynamic_cast<A5*>(a5.getA1()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
-}
-
-} // t2
-
-namespace t3
-{
-
-struct A1
-{
- char _[43981];
- virtual ~A1() {}
-
- A1* getA1() {return this;}
-};
-
-struct A2
-{
- char _[34981];
- virtual ~A2() {}
-
- A2* getA2() {return this;}
-};
-
-struct A3
- : public A1,
- public virtual A2
-{
- char _[93481];
- virtual ~A3() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A3* getA3() {return this;}
-};
-
-struct A4
- : public A1,
- public virtual A2
-{
- char _[13489];
- virtual ~A4() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A4* getA4() {return this;}
-};
-
-struct A5
- : public A3,
- public A4
-{
- char _[41389];
- virtual ~A5() {}
-
- A1* getA14() {return A4::getA1();}
- A1* getA13() {return A3::getA1();}
- A2* getA2() {return A4::getA2();}
- A3* getA3() {return A3::getA3();}
- A4* getA4() {return A4::getA4();}
- A5* getA5() {return this;}
-};
-
-void test()
-{
- A1 a1;
- A2 a2;
- A3 a3;
- A4 a4;
- A5 a5;
-
- assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
- assert(dynamic_cast<A1*>(a2.getA2()) == 0);
- assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
- assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
- assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
- assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
- assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());
- assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());
- assert(dynamic_cast<A1*>(a5.getA2()) == 0);
- assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());
- assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());
-
- assert(dynamic_cast<A2*>(a1.getA1()) == 0);
- assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
- assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
- assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
- assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
- assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2());
- assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
- assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());
- assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());
-
- assert(dynamic_cast<A3*>(a1.getA1()) == 0);
- assert(dynamic_cast<A3*>(a2.getA2()) == 0);
- assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
- assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
- assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
- assert(dynamic_cast<A3*>(a4.getA1()) == 0);
- assert(dynamic_cast<A3*>(a4.getA2()) == 0);
- assert(dynamic_cast<A3*>(a4.getA4()) == 0);
- assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());
-
- assert(dynamic_cast<A4*>(a1.getA1()) == 0);
- assert(dynamic_cast<A4*>(a2.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA1()) == 0);
- assert(dynamic_cast<A4*>(a3.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA3()) == 0);
- assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
- assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
-
- assert(dynamic_cast<A5*>(a1.getA1()) == 0);
- assert(dynamic_cast<A5*>(a2.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA1()) == 0);
- assert(dynamic_cast<A5*>(a3.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA3()) == 0);
- assert(dynamic_cast<A5*>(a4.getA1()) == 0);
- assert(dynamic_cast<A5*>(a4.getA2()) == 0);
- assert(dynamic_cast<A5*>(a4.getA4()) == 0);
- assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
-}
-
-} // t3
-
-namespace t4
-{
-
-struct A1
-{
- char _[43981];
- virtual ~A1() {}
-
- A1* getA1() {return this;}
-};
-
-struct A2
-{
- char _[34981];
- virtual ~A2() {}
-
- A2* getA2() {return this;}
-};
-
-struct A3
- : protected A1,
- public virtual A2
-{
- char _[93481];
- virtual ~A3() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A3* getA3() {return this;}
-};
-
-struct A4
- : public A1,
- public virtual A2
-{
- char _[13489];
- virtual ~A4() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A4* getA4() {return this;}
-};
-
-struct A5
- : public A3,
- public A4
-{
- char _[41389];
- virtual ~A5() {}
-
- A1* getA14() {return A4::getA1();}
- A1* getA13() {return A3::getA1();}
- A2* getA2() {return A4::getA2();}
- A3* getA3() {return A3::getA3();}
- A4* getA4() {return A4::getA4();}
- A5* getA5() {return this;}
-};
-
-void test()
-{
- A1 a1;
- A2 a2;
- A3 a3;
- A4 a4;
- A5 a5;
-
- assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
- assert(dynamic_cast<A1*>(a2.getA2()) == 0);
- assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
- assert(dynamic_cast<A1*>(a3.getA2()) == 0);
-// assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1()); // cast to protected base
- assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
- assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());
- assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());
- assert(dynamic_cast<A1*>(a5.getA2()) == 0);
-// assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13()); // cast to protected base
- assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());
-
- assert(dynamic_cast<A2*>(a1.getA1()) == 0);
- assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
- assert(dynamic_cast<A2*>(a3.getA1()) == 0);
- assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
- assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
- assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2());
- assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
- assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());
- assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA13()) == 0);
- assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());
-
- assert(dynamic_cast<A3*>(a1.getA1()) == 0);
- assert(dynamic_cast<A3*>(a2.getA2()) == 0);
- assert(dynamic_cast<A3*>(a3.getA1()) == 0);
- assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
- assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
- assert(dynamic_cast<A3*>(a4.getA1()) == 0);
- assert(dynamic_cast<A3*>(a4.getA2()) == 0);
- assert(dynamic_cast<A3*>(a4.getA4()) == 0);
- assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA13()) == 0);
- assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());
-
- assert(dynamic_cast<A4*>(a1.getA1()) == 0);
- assert(dynamic_cast<A4*>(a2.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA1()) == 0);
- assert(dynamic_cast<A4*>(a3.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA3()) == 0);
- assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
- assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA13()) == 0);
- assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
-
- assert(dynamic_cast<A5*>(a1.getA1()) == 0);
- assert(dynamic_cast<A5*>(a2.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA1()) == 0);
- assert(dynamic_cast<A5*>(a3.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA3()) == 0);
- assert(dynamic_cast<A5*>(a4.getA1()) == 0);
- assert(dynamic_cast<A5*>(a4.getA2()) == 0);
- assert(dynamic_cast<A5*>(a4.getA4()) == 0);
- assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA13()) == 0);
- assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
-}
-
-} // t4
-
-namespace t5
-{
-
-struct A1
-{
- char _[43981];
- virtual ~A1() {}
-
- A1* getA1() {return this;}
-};
-
-struct A2
-{
- char _[34981];
- virtual ~A2() {}
-
- A2* getA2() {return this;}
-};
-
-struct A3
- : public A1,
- protected virtual A2
-{
- char _[93481];
- virtual ~A3() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A3* getA3() {return this;}
-};
-
-struct A4
- : public A1,
- public virtual A2
-{
- char _[13489];
- virtual ~A4() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A4* getA4() {return this;}
-};
-
-struct A5
- : public A3,
- public A4
-{
- char _[41389];
- virtual ~A5() {}
-
- A1* getA14() {return A4::getA1();}
- A1* getA13() {return A3::getA1();}
- A2* getA2() {return A4::getA2();}
- A3* getA3() {return A3::getA3();}
- A4* getA4() {return A4::getA4();}
- A5* getA5() {return this;}
-};
-
-void test()
-{
- A1 a1;
- A2 a2;
- A3 a3;
- A4 a4;
- A5 a5;
-
- assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
- assert(dynamic_cast<A1*>(a2.getA2()) == 0);
- assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
- assert(dynamic_cast<A1*>(a3.getA2()) == 0);
- assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
- assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
- assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());
- assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());
- assert(dynamic_cast<A1*>(a5.getA2()) == 0);
- assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());
- assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());
-
- assert(dynamic_cast<A2*>(a1.getA1()) == 0);
- assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
- assert(dynamic_cast<A2*>(a3.getA1()) == 0);
- assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
-// assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2()); // cast to protected base
- assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2());
- assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
- assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());
- assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
-// assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2()); // cast to protected base
- assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());
-
- assert(dynamic_cast<A3*>(a1.getA1()) == 0);
- assert(dynamic_cast<A3*>(a2.getA2()) == 0);
- assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
- assert(dynamic_cast<A3*>(a3.getA2()) == 0);
- assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
- assert(dynamic_cast<A3*>(a4.getA1()) == 0);
- assert(dynamic_cast<A3*>(a4.getA2()) == 0);
- assert(dynamic_cast<A3*>(a4.getA4()) == 0);
- assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());
-
- assert(dynamic_cast<A4*>(a1.getA1()) == 0);
- assert(dynamic_cast<A4*>(a2.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA1()) == 0);
- assert(dynamic_cast<A4*>(a3.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA3()) == 0);
- assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
- assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
-
- assert(dynamic_cast<A5*>(a1.getA1()) == 0);
- assert(dynamic_cast<A5*>(a2.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA1()) == 0);
- assert(dynamic_cast<A5*>(a3.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA3()) == 0);
- assert(dynamic_cast<A5*>(a4.getA1()) == 0);
- assert(dynamic_cast<A5*>(a4.getA2()) == 0);
- assert(dynamic_cast<A5*>(a4.getA4()) == 0);
- assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
-}
-
-} // t5
-
-namespace t6
-{
-
-struct A1
-{
- char _[43981];
- virtual ~A1() {}
-
- A1* getA1() {return this;}
-};
-
-struct A2
-{
- char _[34981];
- virtual ~A2() {}
-
- A2* getA2() {return this;}
-};
-
-struct A3
- : public A1,
- public virtual A2
-{
- char _[93481];
- virtual ~A3() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A3* getA3() {return this;}
-};
-
-struct A4
- : protected A1,
- public virtual A2
-{
- char _[13489];
- virtual ~A4() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A4* getA4() {return this;}
-};
-
-struct A5
- : public A3,
- public A4
-{
- char _[41389];
- virtual ~A5() {}
-
- A1* getA14() {return A4::getA1();}
- A1* getA13() {return A3::getA1();}
- A2* getA2() {return A4::getA2();}
- A3* getA3() {return A3::getA3();}
- A4* getA4() {return A4::getA4();}
- A5* getA5() {return this;}
-};
-
-void test()
-{
- A1 a1;
- A2 a2;
- A3 a3;
- A4 a4;
- A5 a5;
-
- assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
- assert(dynamic_cast<A1*>(a2.getA2()) == 0);
- assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
- assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
- assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
- assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA2()) == 0);
-// assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1()); // cast to protected base
- assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());
- assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());
- assert(dynamic_cast<A1*>(a5.getA2()) == 0);
- assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());
-// assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14()); // cast to protected base
-
- assert(dynamic_cast<A2*>(a1.getA1()) == 0);
- assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
- assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
- assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
- assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
- assert(dynamic_cast<A2*>(a4.getA1()) == 0);
- assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
- assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());
- assert(dynamic_cast<A2*>(a5.getA14()) == 0);
- assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());
-
- assert(dynamic_cast<A3*>(a1.getA1()) == 0);
- assert(dynamic_cast<A3*>(a2.getA2()) == 0);
- assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
- assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
- assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
- assert(dynamic_cast<A3*>(a4.getA1()) == 0);
- assert(dynamic_cast<A3*>(a4.getA2()) == 0);
- assert(dynamic_cast<A3*>(a4.getA4()) == 0);
- assert(dynamic_cast<A3*>(a5.getA14()) == 0);
- assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());
-
- assert(dynamic_cast<A4*>(a1.getA1()) == 0);
- assert(dynamic_cast<A4*>(a2.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA1()) == 0);
- assert(dynamic_cast<A4*>(a3.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA3()) == 0);
- assert(dynamic_cast<A4*>(a4.getA1()) == 0);
- assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
- assert(dynamic_cast<A4*>(a5.getA14()) == 0);
- assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
-
- assert(dynamic_cast<A5*>(a1.getA1()) == 0);
- assert(dynamic_cast<A5*>(a2.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA1()) == 0);
- assert(dynamic_cast<A5*>(a3.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA3()) == 0);
- assert(dynamic_cast<A5*>(a4.getA1()) == 0);
- assert(dynamic_cast<A5*>(a4.getA2()) == 0);
- assert(dynamic_cast<A5*>(a4.getA4()) == 0);
- assert(dynamic_cast<A5*>(a5.getA14()) == 0);
- assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
-}
-
-} // t6
-
-namespace t7
-{
-
-struct A1
-{
- char _[43981];
- virtual ~A1() {}
-
- A1* getA1() {return this;}
-};
-
-struct A2
-{
- char _[34981];
- virtual ~A2() {}
-
- A2* getA2() {return this;}
-};
-
-struct A3
- : public A1,
- public virtual A2
-{
- char _[93481];
- virtual ~A3() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A3* getA3() {return this;}
-};
-
-struct A4
- : public A1,
- protected virtual A2
-{
- char _[13489];
- virtual ~A4() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A4* getA4() {return this;}
-};
-
-struct A5
- : public A3,
- public A4
-{
- char _[41389];
- virtual ~A5() {}
-
- A1* getA14() {return A4::getA1();}
- A1* getA13() {return A3::getA1();}
- A2* getA2() {return A4::getA2();}
- A3* getA3() {return A3::getA3();}
- A4* getA4() {return A4::getA4();}
- A5* getA5() {return this;}
-};
-
-void test()
-{
- A1 a1;
- A2 a2;
- A3 a3;
- A4 a4;
- A5 a5;
-
- assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
- assert(dynamic_cast<A1*>(a2.getA2()) == 0);
- assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
- assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
- assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
- assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA2()) == 0);
- assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
- assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());
- assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());
- assert(dynamic_cast<A1*>(a5.getA2()) == 0);
- assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());
- assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());
-
- assert(dynamic_cast<A2*>(a1.getA1()) == 0);
- assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
- assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
- assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
- assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
- assert(dynamic_cast<A2*>(a4.getA1()) == 0);
- assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
-// assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2()); // cast to protected base
- assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());
-// assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2()); // cast to protected base
- assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());
-
- assert(dynamic_cast<A3*>(a1.getA1()) == 0);
- assert(dynamic_cast<A3*>(a2.getA2()) == 0);
- assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
- assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
- assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
- assert(dynamic_cast<A3*>(a4.getA1()) == 0);
- assert(dynamic_cast<A3*>(a4.getA2()) == 0);
- assert(dynamic_cast<A3*>(a4.getA4()) == 0);
- assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());
-
- assert(dynamic_cast<A4*>(a1.getA1()) == 0);
- assert(dynamic_cast<A4*>(a2.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA1()) == 0);
- assert(dynamic_cast<A4*>(a3.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA3()) == 0);
- assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA2()) == 0);
- assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
- assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
-
- assert(dynamic_cast<A5*>(a1.getA1()) == 0);
- assert(dynamic_cast<A5*>(a2.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA1()) == 0);
- assert(dynamic_cast<A5*>(a3.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA3()) == 0);
- assert(dynamic_cast<A5*>(a4.getA1()) == 0);
- assert(dynamic_cast<A5*>(a4.getA2()) == 0);
- assert(dynamic_cast<A5*>(a4.getA4()) == 0);
- assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
-}
-
-} // t7
-
-namespace t8
-{
-
-struct A1
-{
- char _[43981];
- virtual ~A1() {}
-
- A1* getA1() {return this;}
-};
-
-struct A2
-{
- char _[34981];
- virtual ~A2() {}
-
- A2* getA2() {return this;}
-};
-
-struct A3
- : public A1,
- public virtual A2
-{
- char _[93481];
- virtual ~A3() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A3* getA3() {return this;}
-};
-
-struct A4
- : public A1,
- public virtual A2
-{
- char _[13489];
- virtual ~A4() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A4* getA4() {return this;}
-};
-
-struct A5
- : protected A3,
- public A4
-{
- char _[41389];
- virtual ~A5() {}
-
- A1* getA14() {return A4::getA1();}
- A1* getA13() {return A3::getA1();}
- A2* getA2() {return A4::getA2();}
- A3* getA3() {return A3::getA3();}
- A4* getA4() {return A4::getA4();}
- A5* getA5() {return this;}
-};
-
-void test()
-{
- A1 a1;
- A2 a2;
- A3 a3;
- A4 a4;
- A5 a5;
-
- assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
- assert(dynamic_cast<A1*>(a2.getA2()) == 0);
- assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
- assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
- assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
- assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
- assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());
- assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());
- assert(dynamic_cast<A1*>(a5.getA2()) == 0);
- assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());
- assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());
-
- assert(dynamic_cast<A2*>(a1.getA1()) == 0);
- assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
- assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
- assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
- assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
- assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2());
- assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
- assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());
- assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA13()) == 0);
- assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());
-
- assert(dynamic_cast<A3*>(a1.getA1()) == 0);
- assert(dynamic_cast<A3*>(a2.getA2()) == 0);
- assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
- assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
- assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
- assert(dynamic_cast<A3*>(a4.getA1()) == 0);
- assert(dynamic_cast<A3*>(a4.getA2()) == 0);
- assert(dynamic_cast<A3*>(a4.getA4()) == 0);
- assert(dynamic_cast<A3*>(a5.getA14()) == 0);
- assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA4()) == 0);
-// assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3()); // cast to protected base
-
- assert(dynamic_cast<A4*>(a1.getA1()) == 0);
- assert(dynamic_cast<A4*>(a2.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA1()) == 0);
- assert(dynamic_cast<A4*>(a3.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA3()) == 0);
- assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
- assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA13()) == 0);
- assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA3()) == 0);
- assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
-
- assert(dynamic_cast<A5*>(a1.getA1()) == 0);
- assert(dynamic_cast<A5*>(a2.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA1()) == 0);
- assert(dynamic_cast<A5*>(a3.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA3()) == 0);
- assert(dynamic_cast<A5*>(a4.getA1()) == 0);
- assert(dynamic_cast<A5*>(a4.getA2()) == 0);
- assert(dynamic_cast<A5*>(a4.getA4()) == 0);
- assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA13()) == 0);
- assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA3()) == 0);
- assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
-}
-
-} // t8
-
-namespace t9
-{
-
-struct A1
-{
- char _[43981];
- virtual ~A1() {}
-
- A1* getA1() {return this;}
-};
-
-struct A2
-{
- char _[34981];
- virtual ~A2() {}
-
- A2* getA2() {return this;}
-};
-
-struct A3
- : public A1,
- public virtual A2
-{
- char _[93481];
- virtual ~A3() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A3* getA3() {return this;}
-};
-
-struct A4
- : public A1,
- public virtual A2
-{
- char _[13489];
- virtual ~A4() {}
-
- A1* getA1() {return A1::getA1();}
- A2* getA2() {return A2::getA2();}
- A4* getA4() {return this;}
-};
-
-struct A5
- : public A3,
- protected A4
-{
- char _[41389];
- virtual ~A5() {}
-
- A1* getA14() {return A4::getA1();}
- A1* getA13() {return A3::getA1();}
- A2* getA2() {return A4::getA2();}
- A3* getA3() {return A3::getA3();}
- A4* getA4() {return A4::getA4();}
- A5* getA5() {return this;}
-};
-
-void test()
-{
- A1 a1;
- A2 a2;
- A3 a3;
- A4 a4;
- A5 a5;
-
- assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
- assert(dynamic_cast<A1*>(a2.getA2()) == 0);
- assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
- assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
- assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
- assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());
- assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
- assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());
- assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());
- assert(dynamic_cast<A1*>(a5.getA2()) == 0);
- assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());
- assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());
-
- assert(dynamic_cast<A2*>(a1.getA1()) == 0);
- assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
- assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
- assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
- assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
- assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2());
- assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
- assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());
- assert(dynamic_cast<A2*>(a5.getA14()) == 0);
- assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());
- assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());
-
- assert(dynamic_cast<A3*>(a1.getA1()) == 0);
- assert(dynamic_cast<A3*>(a2.getA2()) == 0);
- assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
- assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
- assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
- assert(dynamic_cast<A3*>(a4.getA1()) == 0);
- assert(dynamic_cast<A3*>(a4.getA2()) == 0);
- assert(dynamic_cast<A3*>(a4.getA4()) == 0);
- assert(dynamic_cast<A3*>(a5.getA14()) == 0);
- assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
- assert(dynamic_cast<A3*>(a5.getA4()) == 0);
- assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());
-
- assert(dynamic_cast<A4*>(a1.getA1()) == 0);
- assert(dynamic_cast<A4*>(a2.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA1()) == 0);
- assert(dynamic_cast<A4*>(a3.getA2()) == 0);
- assert(dynamic_cast<A4*>(a3.getA3()) == 0);
- assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
- assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
- assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA13()) == 0);
- assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
- assert(dynamic_cast<A4*>(a5.getA3()) == 0);
- assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
-// assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4()); // cast to protected base
-
- assert(dynamic_cast<A5*>(a1.getA1()) == 0);
- assert(dynamic_cast<A5*>(a2.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA1()) == 0);
- assert(dynamic_cast<A5*>(a3.getA2()) == 0);
- assert(dynamic_cast<A5*>(a3.getA3()) == 0);
- assert(dynamic_cast<A5*>(a4.getA1()) == 0);
- assert(dynamic_cast<A5*>(a4.getA2()) == 0);
- assert(dynamic_cast<A5*>(a4.getA4()) == 0);
- assert(dynamic_cast<A5*>(a5.getA14()) == 0);
- assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
- assert(dynamic_cast<A5*>(a5.getA4()) == 0);
- assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
-}
-
-} // t9
-
-#include <chrono>
-#include <iostream>
-
-int main()
-{
- typedef std::chrono::high_resolution_clock Clock;
- typedef Clock::time_point time_point;
- typedef std::chrono::duration<double, std::micro> NS;
- time_point t0 = Clock::now();
- t1::test();
- t2::test();
- t3::test();
- t4::test();
- t5::test();
- t6::test();
- t7::test();
- t8::test();
- t9::test();
- time_point t1 = Clock::now();
- std::cout << NS(t1-t0).count() << " microseconds\n";
-}