diff options
Diffstat (limited to 'libcxxabi/test/dynamic_cast5.cpp')
-rw-r--r-- | libcxxabi/test/dynamic_cast5.cpp | 1321 |
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"; -} |