blob: 9f0dd16cd1d5dea8621b586d5ab63f085219cc3d [file] [log] [blame]
# 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
# Test raw pointer handling involving virtual inheritance
kini = KlassInheritance("KlassInheritanceInput");
checkCount(1);
s = useKlassRawPtr(kini);
if (!strcmp(s, "KlassInheritanceInput"))
error("Incorrect string: %s", s);
endif
clear kini;
checkCount(0);
# 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;
notowned = get_not_owned_ptr(kin);
try
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
checkCount(1);
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);
null = []; # NULL pointer
null_ptr = make_null();
takeKlassAutoPtr([]);
takeKlassAutoPtr(null);
takeKlassAutoPtr(null_ptr);
checkCount(0);
# overloaded parameters
if (overloadTest() != 0)
error("overloadTest failed");
endif
if (overloadTest(null) != 1)
error("overloadTest failed");
endif
if (overloadTest(Klass("over")) != 1)
error("overloadTest failed");
endif
checkCount(0);
# auto_ptr as output
k1 = makeKlassAutoPtr("first");
if (!strcmp(k1.getLabel(), "first"))
error("wrong object label");
endif
k2 = makeKlassAutoPtr("second");
checkCount(2);
clear k1;
checkCount(1);
if (!strcmp(k2.getLabel(), "second"))
error("wrong object label");
endif
clear k2;
checkCount(0);
null_smart_prt = makeNullAutoPtr();
assert(ismatrix(null_smart_prt))
assert(size(null_smart_prt) == size([]))
assert(isequal([], null_smart_prt))