235 lines
4.0 KiB
Mathematica
235 lines
4.0 KiB
Mathematica
|
|
# do not dump Octave core
|
||
|
|
if exist("crash_dumps_octave_core", "builtin")
|
||
|
|
crash_dumps_octave_core(0);
|
||
|
|
endif
|
||
|
|
|
||
|
|
overload_simple_cast
|
||
|
|
|
||
|
|
Ai=@(x) subclass('x',x,'__int',@(self) self.x);
|
||
|
|
Ad=@(x) subclass('x',x,'__float',@(self) self.x);
|
||
|
|
|
||
|
|
ai = Ai(4);
|
||
|
|
|
||
|
|
ad = Ad(5.0);
|
||
|
|
add = Ad(5.5);
|
||
|
|
|
||
|
|
try
|
||
|
|
fint(add);
|
||
|
|
good = 0;
|
||
|
|
catch
|
||
|
|
good = 1;
|
||
|
|
end_try_catch
|
||
|
|
|
||
|
|
if (!good)
|
||
|
|
error("fint(int)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
|
||
|
|
if (!strcmp(fint(ad),"fint:int"))
|
||
|
|
error("fint(int)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(fdouble(ad),"fdouble:double"))
|
||
|
|
error("fdouble(double)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(fint(ai),"fint:int"))
|
||
|
|
error("fint(int)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(fint(5.0),"fint:int"))
|
||
|
|
error("fint(int)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(fint(3),"fint:int"))
|
||
|
|
error("fint(int)")
|
||
|
|
endif
|
||
|
|
if (!strcmp(fint(3.0),"fint:int"))
|
||
|
|
error("fint(int)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(fdouble(ad),"fdouble:double"))
|
||
|
|
error("fdouble(double)")
|
||
|
|
endif
|
||
|
|
if (!strcmp(fdouble(3),f"fdouble:double"))
|
||
|
|
error("fdouble(double)")
|
||
|
|
endif
|
||
|
|
if (!strcmp(fdouble(3.0),"fdouble:double"))
|
||
|
|
error("fdouble(double)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(fid(3,3.0),"fid:intdouble"))
|
||
|
|
error("fid:intdouble")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(fid(3.0,3),"fid:doubleint"))
|
||
|
|
error("fid:doubleint")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(fid(ad,ai),"fid:doubleint"))
|
||
|
|
error("fid:doubleint")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(fid(ai,ad),"fid:intdouble"))
|
||
|
|
error("fid:intdouble")
|
||
|
|
endif
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
if (!strcmp(foo(3),"foo:int"))
|
||
|
|
error("foo(int)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(foo(3.0),"foo:double"))
|
||
|
|
error("foo(double)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(foo("hello"),"foo:char *"))
|
||
|
|
error("foo(char *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
f = Foo();
|
||
|
|
b = Bar();
|
||
|
|
|
||
|
|
if (!strcmp(foo(f),"foo:Foo *"))
|
||
|
|
error("foo(Foo *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(foo(b),"foo:Bar *"))
|
||
|
|
error("foo(Bar *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
v = malloc_void(32);
|
||
|
|
|
||
|
|
if (!strcmp(foo(v),"foo:void *"))
|
||
|
|
error("foo(void *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
s = Spam();
|
||
|
|
|
||
|
|
if (!strcmp(s.foo(3),"foo:int"))
|
||
|
|
error("Spam::foo(int)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(s.foo(3.0),"foo:double"))
|
||
|
|
error("Spam::foo(double)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(s.foo("hello"),"foo:char *"))
|
||
|
|
error("Spam::foo(char *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(s.foo(f),"foo:Foo *"))
|
||
|
|
error("Spam::foo(Foo *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(s.foo(b),"foo:Bar *"))
|
||
|
|
error("Spam::foo(Bar *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(s.foo(v),"foo:void *"))
|
||
|
|
error("Spam::foo(void *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(Spam_bar(3),"bar:int"))
|
||
|
|
error("Spam::bar(int)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(Spam_bar(3.0),"bar:double"))
|
||
|
|
error("Spam::bar(double)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(Spam_bar("hello"),"bar:char *"))
|
||
|
|
error("Spam::bar(char *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(Spam_bar(f),"bar:Foo *"))
|
||
|
|
error("Spam::bar(Foo *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(Spam_bar(b),"bar:Bar *"))
|
||
|
|
error("Spam::bar(Bar *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
if (!strcmp(Spam_bar(v),"bar:void *"))
|
||
|
|
error("Spam::bar(void *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
# Test constructors
|
||
|
|
|
||
|
|
s = Spam();
|
||
|
|
if (!strcmp(s.type,"none"))
|
||
|
|
error("Spam()")
|
||
|
|
endif
|
||
|
|
|
||
|
|
s = Spam(3);
|
||
|
|
if (!strcmp(s.type,"int"))
|
||
|
|
error("Spam(int)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
s = Spam(3.4);
|
||
|
|
if (!strcmp(s.type,"double"))
|
||
|
|
error("Spam(double)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
s = Spam("hello");
|
||
|
|
if (!strcmp(s.type,"char *"))
|
||
|
|
error("Spam(char *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
s = Spam(f);
|
||
|
|
if (!strcmp(s.type,"Foo *"))
|
||
|
|
error("Spam(Foo *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
s = Spam(b);
|
||
|
|
if (!strcmp(s.type,"Bar *"))
|
||
|
|
error("Spam(Bar *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
s = Spam(v);
|
||
|
|
if (!strcmp(s.type,"void *"))
|
||
|
|
error("Spam(void *)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
|
||
|
|
# unsigned long long
|
||
|
|
ullmax = 9223372036854775807; #0xffffffffffffffff
|
||
|
|
ullmaxd = 9007199254740992.0;
|
||
|
|
ullmin = 0;
|
||
|
|
ullmind = 0.0;
|
||
|
|
if (ull(ullmin) != ullmin)
|
||
|
|
error("ull(ullmin)")
|
||
|
|
endif
|
||
|
|
if (ull(ullmax) != ullmax)
|
||
|
|
error("ull(ullmax)")
|
||
|
|
endif
|
||
|
|
if (ull(ullmind) != ullmind)
|
||
|
|
error("ull(ullmind)")
|
||
|
|
endif
|
||
|
|
if (ull(ullmaxd) != ullmaxd)
|
||
|
|
error("ull(ullmaxd)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
# long long
|
||
|
|
llmax = 9223372036854775807; #0x7fffffffffffffff
|
||
|
|
llmin = -9223372036854775808;
|
||
|
|
# these are near the largest floats we can still convert into long long
|
||
|
|
llmaxd = 9007199254740992.0;
|
||
|
|
llmind = -9007199254740992.0;
|
||
|
|
if (ll(llmin) != llmin)
|
||
|
|
error("ll(llmin)")
|
||
|
|
endif
|
||
|
|
if (ll(llmax) != llmax)
|
||
|
|
error("ll(llmax)")
|
||
|
|
endif
|
||
|
|
if (ll(llmind) != llmind)
|
||
|
|
error("ll(llmind)")
|
||
|
|
endif
|
||
|
|
if (ll(llmaxd) != llmaxd)
|
||
|
|
error("ll(llmaxd)")
|
||
|
|
endif
|
||
|
|
|
||
|
|
free_void(v);
|
||
|
|
|