summaryrefslogtreecommitdiff
path: root/Examples/test-suite/octave
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2022-08-01 23:49:14 +0100
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2022-08-02 00:00:54 +0100
commit2ccc9bd0607664ff1b86b65be4c797eeb69fcc00 (patch)
tree2cdb48386bf64c913334b4df65662ca0c9becac9 /Examples/test-suite/octave
parent1730e4126e4283d3fd42cc4cd4710eec1919b3f5 (diff)
downloadswig-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.m109
-rw-r--r--Examples/test-suite/octave/li_std_auto_ptr_runme.m108
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