## test class instantiation methods defclass A | a b c | { defun ::* newInstance(x y z) { set a x; set b y; set c z; return self; }; defun get-a() { return self.a; }; defun get-b() { return self.b; }; defun get-c() { return self.c; }; }; defclass B ::: A | d e f | { defun ::* newInstance(x y z) { super:newInstance (* x 2) (* y 2) (* z 2); set d x; set e y; set f z; return self; }; defun sum() { return (+ (super:get-a) (super:get-b) (super:get-c) self.d self.e self.f); }; }; set a ((B:newInstance 1 2 3):sum); if (/= a 18) { printf "ERROR: a must be 18\n"; } else { printf "OK %d\n" a; }; set b (B:newInstance 2 3 4); set a (b:get-a); if (/= a 4) {printf "ERROR: a must be 4\n" } else { printf "OK %d\n" a }; set a (b:get-b); if (/= a 6) { printf "ERROR: a must be 6\n" } else { printf "OK %d\n" a }; set a (b:get-c); if (/= a 8) { printf "ERROR: a must be 8\n" } else {printf "OK %d\n" a }; set a (b:sum); if (/= a 27) { printf "ERROR: a must be 27\n" } else { printf "OK %d\n" a };