| <?php | |
| require "tests.php"; | |
| function checkCount($expected_count) { | |
| $actual_count = Klass::getTotal_count(); | |
| check::equal($actual_count, $expected_count, "Counts incorrect"); | |
| } | |
| # Test raw pointer handling involving virtual inheritance | |
| $kini = new KlassInheritance("KlassInheritanceInput"); | |
| checkCount(1); | |
| $s = useKlassRawPtr($kini); | |
| check::equal($s, "KlassInheritanceInput", "Incorrect string: $s"); | |
| $kini = NULL; | |
| checkCount(0); | |
| # auto_ptr as input | |
| $kin = new Klass("KlassInput"); | |
| checkCount(1); | |
| $s = takeKlassAutoPtr($kin); | |
| checkCount(0); | |
| check::equal($s, "KlassInput", "Incorrect string: $s"); | |
| try { | |
| is_nullptr($kin); | |
| check::fail("is_nullptr check"); | |
| } catch (TypeError $e) { | |
| } | |
| $kin = NULL; # Should not fail, even though already deleted | |
| checkCount(0); | |
| $kin = new Klass("KlassInput"); | |
| checkCount(1); | |
| $s = takeKlassAutoPtr($kin); | |
| checkCount(0); | |
| check::equal($s, "KlassInput", "Incorrect string: $s"); | |
| try { | |
| is_nullptr($kin); | |
| check::fail("is_nullptr check"); | |
| } catch (TypeError $e) { | |
| } | |
| $exception_thrown = false; | |
| try { | |
| takeKlassAutoPtr($kin); | |
| } catch (TypeError $e) { | |
| check::equal($e->getMessage(), "Cannot release ownership as memory is not owned for argument 1 of SWIGTYPE_p_Klass of takeKlassAutoPtr", "Unexpected exception: {$e->getMessage()}"); | |
| $exception_thrown = true; | |
| } | |
| check::equal($exception_thrown, true, "double usage of takeKlassAutoPtr should have been an error"); | |
| $kin = NULL; # Should not fail, even though already deleted | |
| checkCount(0); | |
| $kin = new Klass("KlassInput"); | |
| $exception_thrown = false; | |
| $notowned = get_not_owned_ptr($kin); | |
| try { | |
| takeKlassAutoPtr($notowned); | |
| } catch (TypeError $e) { | |
| check::equal($e->getMessage(), "Cannot release ownership as memory is not owned for argument 1 of SWIGTYPE_p_Klass of takeKlassAutoPtr", "Unexpected exception: {$e->getMessage()}"); | |
| $exception_thrown = true; | |
| } | |
| check::equal($exception_thrown, true, "double usage of takeKlassAutoPtr should have been an error"); | |
| checkCount(1); | |
| $kin = NULL; | |
| checkCount(0); | |
| $kini = new KlassInheritance("KlassInheritanceInput"); | |
| checkCount(1); | |
| $s = takeKlassAutoPtr($kini); | |
| checkCount(0); | |
| check::equal($s, "KlassInheritanceInput", "Incorrect string: $s"); | |
| try { | |
| is_nullptr($kini); | |
| check::fail("is_nullptr check"); | |
| } catch (TypeError $e) { | |
| } | |
| $kini = NULL; # Should not fail, even though already deleted | |
| checkCount(0); | |
| takeKlassAutoPtr(NULL); | |
| takeKlassAutoPtr(make_null()); | |
| checkCount(0); | |
| # overloaded parameters | |
| check::equal(overloadTest(), 0, "overloadTest failed"); | |
| check::equal(overloadTest(NULL), 1, "overloadTest failed"); | |
| check::equal(overloadTest(new Klass("over")), 1, "overloadTest failed"); | |
| checkCount(0); | |
| # auto_ptr as output | |
| $k1 = makeKlassAutoPtr("first"); | |
| $k2 = makeKlassAutoPtr("second"); | |
| checkCount(2); | |
| $k1 = NULL; | |
| checkCount(1); | |
| check::equal($k2->getLabel(), "second", "proper label"); | |
| $k2 = NULL; | |
| checkCount(0); | |
| check::equal(makeNullAutoPtr(), NULL); | |
| check::done(); |