diff options
Diffstat (limited to 'Examples/test-suite/python/li_std_auto_ptr_runme.py')
-rw-r--r-- | Examples/test-suite/python/li_std_auto_ptr_runme.py | 104 |
1 files changed, 98 insertions, 6 deletions
diff --git a/Examples/test-suite/python/li_std_auto_ptr_runme.py b/Examples/test-suite/python/li_std_auto_ptr_runme.py index 6d2479f87..dd8893f40 100644 --- a/Examples/test-suite/python/li_std_auto_ptr_runme.py +++ b/Examples/test-suite/python/li_std_auto_ptr_runme.py @@ -1,17 +1,109 @@ from li_std_auto_ptr import * +def checkCount(expected_count): + actual_count = Klass.getTotal_count() + if (actual_count != expected_count): + raise RuntimeError("Counts incorrect, expected:" + expected_count + " actual:" + actual_count) + +# Test raw pointer handling involving virtual inheritance +kini = KlassInheritance("KlassInheritanceInput") +checkCount(1) +s = useKlassRawPtr(kini) +if s != "KlassInheritanceInput": + raise RuntimeError("Incorrect string: " + s) +del kini +checkCount(0) + + +# auto_ptr as input +kin = Klass("KlassInput") +checkCount(1) +s = takeKlassAutoPtr(kin) +checkCount(0) +if kin.thisown: + raise RuntimeError("thisown should be false") +if s != "KlassInput": + raise RuntimeError("Incorrect string: " + s) +if not is_nullptr(kin): + raise RuntimeError("is_nullptr failed") +del kin # Should not fail, even though already deleted +checkCount(0) + +kin = Klass("KlassInput") +checkCount(1) +s = takeKlassAutoPtr(kin) +checkCount(0) +if kin.thisown: + raise RuntimeError("thisown should be false") +if s != "KlassInput": + raise RuntimeError("Incorrect string: " + s) +if not is_nullptr(kin): + raise RuntimeError("is_nullptr failed") +exception_thrown = False +try: + s = takeKlassAutoPtr(kin) +except RuntimeError as e: + if "cannot release ownership as memory is not owned" not in str(e): + raise RuntimeError("incorrect exception message"); + exception_thrown = True +if not exception_thrown: + raise RuntimeError("double usage of takeKlassAutoPtr should have been an error") +del kin # Should not fail, even though already deleted +checkCount(0) + +kin = Klass("KlassInput") +exception_thrown = False +notowned = get_not_owned_ptr(kin) +try: + takeKlassAutoPtr(notowned) +except RuntimeError as e: + exception_thrown = True +if not exception_thrown: + raise RuntimeError("Should have thrown 'Cannot release ownership as memory is not owned' error") +checkCount(1) +del kin +checkCount(0) + +kini = KlassInheritance("KlassInheritanceInput") +checkCount(1) +s = takeKlassAutoPtr(kini) +checkCount(0) +if kini.thisown: + raise RuntimeError("thisown should be false") +if s != "KlassInheritanceInput": + raise RuntimeError("Incorrect string: " + s) +if not is_nullptr(kini): + raise RuntimeError("is_nullptr failed") +del kini # Should not fail, even though already deleted +checkCount(0) + +takeKlassAutoPtr(None) +takeKlassAutoPtr(make_null()) +checkCount(0) + +# overloaded parameters +if overloadTest() != 0: + raise RuntimeError("overloadTest failed") +if overloadTest(None) != 1: + raise RuntimeError("overloadTest failed") +if overloadTest(Klass("over")) != 1: + raise RuntimeError("overloadTest failed") +checkCount(0); + + +# auto_ptr as output k1 = makeKlassAutoPtr("first") k2 = makeKlassAutoPtr("second") -if Klass_getTotal_count() != 2: - raise "number of objects should be 2" +checkCount(2) del k1 -if Klass_getTotal_count() != 1: - raise "number of objects should be 1" +checkCount(1) if k2.getLabel() != "second": raise "wrong object label" del k2 -if Klass_getTotal_count() != 0: - raise "no objects should be left" +checkCount(0) + +if (makeNullAutoPtr() != None): + raise RuntimeError("null failure") |