# do not dump Octave core
if exist("crash_dumps_octave_core", "builtin")
  crash_dumps_octave_core(0);
endif

scriptDir = fileparts(mfilename('fullpath'));
addpath(scriptDir);

# Operator overloading example
swigexample

a = swigexample.ComplexVal(2,3);
b = swigexample.ComplexVal(-5,10);

printf("a   = %s\n",disp(a));
printf("b   = %s\n",disp(b));

c = a + b;
printf("c   = %s\n",disp(c));
printf("a*b = %s\n",disp(a*b));
printf("a-c = %s\n",disp(a-c));

e = swigexample.ComplexVal(a-c);
printf("e   = %s\n",disp(e));

# Big expression
f = ((a+b)*(c+b*e)) + (-a);
printf("f   = %s\n",disp(f));

# paren overloading
printf("a(3)= %s\n",disp(a(3)));

# friend operator
printf("2*a = %s\n",disp(2*a));

# conversions
printf("single(a) = %g\n", single(a));
printf("double(a) = %g\n", double(a));

# unary functions
if swig_octave_prereq(3,8,0)
  printf("real(a) = %g\n", real(a));
  printf("imag(a) = %g\n", imag(a));
  printf("abs(a) = %g\n", abs(a));
  printf("conj(a) = %s\n", disp(conj(a)));
  printf("exp(a) = %s\n", disp(exp(a)));
endif

# concatenation operator, note: calls @swig_ref/horzcat.m
g = [a, b, c];
printf("g   = %s\n",disp(g));
