diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/runner.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/runner.py b/tests/runner.py index bc5db67d..95fe03c4 100644 --- a/tests/runner.py +++ b/tests/runner.py @@ -1063,6 +1063,37 @@ if 'benchmark' not in str(sys.argv): ''' self.do_run(src, '*11,74,32,1012*\n*11*\n*22*') + def test_dynamic_cast(self): + src = ''' + #include <stdio.h> + + class CBase { virtual void dummy() {} }; + class CDerived : public CBase { int a; }; + class CDerivedest : public CDerived { float b; }; + + int main () + { + CBase *pa = new CBase; + CBase *pb = new CDerived; + CBase *pc = new CDerivedest; + + printf("a1: %d\\n", dynamic_cast<CDerivedest*>(pa) != NULL); + printf("a2: %d\\n", dynamic_cast<CDerived*>(pa) != NULL); + printf("a3: %d\\n", dynamic_cast<CBase*>(pa) != NULL); + + printf("b1: %d\\n", dynamic_cast<CDerivedest*>(pb) != NULL); + printf("b2: %d\\n", dynamic_cast<CDerived*>(pb) != NULL); + printf("b3: %d\\n", dynamic_cast<CBase*>(pb) != NULL); + + printf("c1: %d\\n", dynamic_cast<CDerivedest*>(pc) != NULL); + printf("c2: %d\\n", dynamic_cast<CDerived*>(pc) != NULL); + printf("c3: %d\\n", dynamic_cast<CBase*>(pc) != NULL); + + return 0; + } + ''' + self.do_run(src, 'a1: 0\na2: 0\na3: 1\nb1: 0\nb2: 1\nb3: 1\nc1: 1\nc2: 1\nc3: 1\n') + def test_funcptr(self): src = ''' #include <stdio.h> |