diff options
author | William S Fulton <wsf@fultondesigns.co.uk> | 2022-08-01 23:49:14 +0100 |
---|---|---|
committer | William S Fulton <wsf@fultondesigns.co.uk> | 2022-08-02 00:00:54 +0100 |
commit | 2ccc9bd0607664ff1b86b65be4c797eeb69fcc00 (patch) | |
tree | 2cdb48386bf64c913334b4df65662ca0c9becac9 /Examples/test-suite/octave | |
parent | 1730e4126e4283d3fd42cc4cd4710eec1919b3f5 (diff) | |
download | swig-2ccc9bd0607664ff1b86b65be4c797eeb69fcc00.tar.gz |
Add Octave support for std::unique_ptr and std::auto_ptr
Equivalent to Ruby/Python implementations.
Diffstat (limited to 'Examples/test-suite/octave')
-rw-r--r-- | Examples/test-suite/octave/cpp11_std_unique_ptr_runme.m | 109 | ||||
-rw-r--r-- | Examples/test-suite/octave/li_std_auto_ptr_runme.m | 108 |
2 files changed, 217 insertions, 0 deletions
diff --git a/Examples/test-suite/octave/cpp11_std_unique_ptr_runme.m b/Examples/test-suite/octave/cpp11_std_unique_ptr_runme.m new file mode 100644 index 000000000..3da93e338 --- /dev/null +++ b/Examples/test-suite/octave/cpp11_std_unique_ptr_runme.m @@ -0,0 +1,109 @@ +# do not dump Octave core +if exist("crash_dumps_octave_core", "builtin") + crash_dumps_octave_core(0); +endif + +cpp11_std_unique_ptr + +function checkCount(expected_count) + actual_count = Klass_getTotal_count(); + if (actual_count != expected_count) + error("Counts incorrect, expected:%d actual:%d", expected_count, actual_count); + endif +end + + +# unique_ptr as input +kin = Klass("KlassInput"); +checkCount(1); +s = takeKlassUniquePtr(kin); +checkCount(0); +if (!strcmp(s, "KlassInput")) + error("Incorrect string: %s", s); +endif +if (!is_nullptr(kin)) + error("is_nullptr failed"); +endif +clear kin; # Should not fail, even though already deleted +checkCount(0); + +kin = Klass("KlassInput"); +checkCount(1); +s = takeKlassUniquePtr(kin); +checkCount(0); +if (!strcmp(s, "KlassInput")) + error("Incorrect string: %s", s); +endif +if (!is_nullptr(kin)) + error("is_nullptr failed"); +endif +exception_thrown = false; +try + takeKlassUniquePtr(kin); +catch e + if (isempty(strfind(e.message, "cannot release ownership as memory is not owned"))) + error("incorrect exception message %s", e.message); + endif + exception_thrown = true; +end_try_catch +if (!exception_thrown) + error("double usage of takeKlassUniquePtr should have been an error"); +endif +clear kin; # Should not fail, even though already deleted +checkCount(0); + +kin = Klass("KlassInput"); +exception_thrown = false; +try + notowned = get_not_owned_ptr(kin); + takeKlassUniquePtr(notowned); +catch e + if (isempty(strfind(e.message, "cannot release ownership as memory is not owned"))) + error("incorrect exception message %s", e.message); + endif + exception_thrown = true; +end_try_catch +if (!exception_thrown) + error("Should have thrown 'Cannot release ownership as memory is not owned' error"); +endif +clear kin; +checkCount(0); + +kini = KlassInheritance("KlassInheritanceInput"); +checkCount(1); +s = takeKlassUniquePtr(kini); +checkCount(0); +if (!strcmp(s, "KlassInheritanceInput")) + error("Incorrect string: %s", s); +endif +if (!is_nullptr(kini)) + error("is_nullptr failed"); +endif +clear kini; # Should not fail, even though already deleted +checkCount(0); + + +# unique_ptr as output +k1 = makeKlassUniquePtr("first"); +if (!strcmp(k1.getLabel(), "first")) + error("wrong object label"); +endif + +k2 = makeKlassUniquePtr("second"); +if (Klass_getTotal_count() != 2) + error("number of objects should be 2"); +endif + +clear k1; +if (Klass.getTotal_count() != 1) + error("number of objects should be 1"); +endif + +if (!strcmp(k2.getLabel(), "second")) + error("wrong object label"); +endif + +clear k2; +if (Klass.getTotal_count() != 0) + error("no objects should be left"); +endif diff --git a/Examples/test-suite/octave/li_std_auto_ptr_runme.m b/Examples/test-suite/octave/li_std_auto_ptr_runme.m new file mode 100644 index 000000000..c1e655db5 --- /dev/null +++ b/Examples/test-suite/octave/li_std_auto_ptr_runme.m @@ -0,0 +1,108 @@ +# do not dump Octave core +if exist("crash_dumps_octave_core", "builtin") + crash_dumps_octave_core(0); +endif + +li_std_auto_ptr + +function checkCount(expected_count) + actual_count = Klass_getTotal_count(); + if (actual_count != expected_count) + error("Counts incorrect, expected:%d actual:%d", expected_count, actual_count); + endif +end + +# auto_ptr as input +kin = Klass("KlassInput"); +checkCount(1); +s = takeKlassAutoPtr(kin); +checkCount(0); +if (!strcmp(s, "KlassInput")) + error("Incorrect string: %s", s); +endif +if (!is_nullptr(kin)) + error("is_nullptr failed"); +endif +clear kin; # Should not fail, even though already deleted +checkCount(0); + +kin = Klass("KlassInput"); +checkCount(1); +s = takeKlassAutoPtr(kin); +checkCount(0); +if (!strcmp(s, "KlassInput")) + error("Incorrect string: %s", s); +endif +if (!is_nullptr(kin)) + error("is_nullptr failed"); +endif +exception_thrown = false; +try + takeKlassAutoPtr(kin); +catch e + if (isempty(strfind(e.message, "cannot release ownership as memory is not owned"))) + error("incorrect exception message %s", e.message); + endif + exception_thrown = true; +end_try_catch +if (!exception_thrown) + error("double usage of takeKlassAutoPtr should have been an error"); +endif +clear kin; # Should not fail, even though already deleted +checkCount(0); + +kin = Klass("KlassInput"); +exception_thrown = false; +try + notowned = get_not_owned_ptr(kin); + takeKlassAutoPtr(notowned); +catch e + if (isempty(strfind(e.message, "cannot release ownership as memory is not owned"))) + error("incorrect exception message %s", e.message); + endif + exception_thrown = true; +end_try_catch +if (!exception_thrown) + error("Should have thrown 'Cannot release ownership as memory is not owned' error"); +endif +clear kin; +checkCount(0); + +kini = KlassInheritance("KlassInheritanceInput"); +checkCount(1); +s = takeKlassAutoPtr(kini); +checkCount(0); +if (!strcmp(s, "KlassInheritanceInput")) + error("Incorrect string: %s", s); +endif +if (!is_nullptr(kini)) + error("is_nullptr failed"); +endif +clear kini; # Should not fail, even though already deleted +checkCount(0); + + +# auto_ptr as output +k1 = makeKlassAutoPtr("first"); +if (!strcmp(k1.getLabel(), "first")) + error("wrong object label"); +endif + +k2 = makeKlassAutoPtr("second"); +if (Klass_getTotal_count() != 2) + error("number of objects should be 2"); +endif + +clear k1; +if (Klass.getTotal_count() != 1) + error("number of objects should be 1"); +endif + +if (!strcmp(k2.getLabel(), "second")) + error("wrong object label"); +endif + +clear k2; +if (Klass.getTotal_count() != 0) + error("no objects should be left"); +endif |