2023-11-09 17:59:41 +00:00
|
|
|
## test class instantiation methods
|
2022-03-17 13:22:17 +00:00
|
|
|
|
2024-09-18 12:41:00 +00:00
|
|
|
fun UndefinedObject: ~= (oprnd) { return (nqv? self oprnd) } ## for if (a ~= nil) ...
|
2024-09-03 03:18:08 +00:00
|
|
|
fun Number: + (oprnd) { return (+ self oprnd) }
|
|
|
|
fun Number: - (oprnd) { return (- self oprnd) }
|
|
|
|
fun Number: * (oprnd) { return (* self oprnd) }
|
|
|
|
fun Number: / (oprnd) { return (/ self oprnd) }
|
|
|
|
fun Number: > (oprnd) { return (> self oprnd) }
|
|
|
|
fun Number: < (oprnd) { return (< self oprnd) }
|
|
|
|
fun Number: >= (oprnd) { return (>= self oprnd) }
|
|
|
|
fun Number: <= (oprnd) { return (<= self oprnd) }
|
|
|
|
fun Number: == (oprnd) { return (== self oprnd) }
|
|
|
|
fun Number: ~= (oprnd) { return (~= self oprnd) }
|
|
|
|
|
2024-07-09 14:44:24 +00:00
|
|
|
class A [ a b c ] {
|
2024-01-01 16:41:41 +00:00
|
|
|
|
2024-10-01 15:33:34 +00:00
|
|
|
fun(#ci) newInstance(x y z) {
|
2024-01-01 16:41:41 +00:00
|
|
|
set a x;
|
|
|
|
set b y;
|
|
|
|
set c z;
|
|
|
|
return self;
|
|
|
|
};
|
|
|
|
|
2024-09-28 02:57:56 +00:00
|
|
|
fun get-a() { return self.a; };
|
|
|
|
fun get-b() { return self.b; };
|
|
|
|
fun get-c() { return self.c; };
|
2024-01-01 16:41:41 +00:00
|
|
|
};
|
|
|
|
|
2024-10-03 13:54:03 +00:00
|
|
|
class B: A [ d e f ] {
|
2024-01-01 16:41:41 +00:00
|
|
|
|
2024-10-01 15:33:34 +00:00
|
|
|
fun(#ci) newInstance(x y z) {
|
2024-01-01 16:41:41 +00:00
|
|
|
super:newInstance (* x 2) (* y 2) (* z 2);
|
|
|
|
set d x;
|
|
|
|
set e y;
|
|
|
|
set f z;
|
|
|
|
return self;
|
|
|
|
};
|
|
|
|
|
2024-10-01 15:33:34 +00:00
|
|
|
fun(#c) getSuper() { return super; };
|
|
|
|
###fun(#c) getSuperclass() { return (self:superclass); };
|
|
|
|
fun(#c) getSelf() { return self; };
|
2024-02-07 16:39:21 +00:00
|
|
|
|
2024-09-28 02:57:56 +00:00
|
|
|
fun sum() {
|
2024-01-01 16:41:41 +00:00
|
|
|
return (+ (super:get-a) (super:get-b) (super:get-c) self.d self.e self.f);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2024-09-18 12:41:00 +00:00
|
|
|
a := ((B:newInstance 1 2 3):sum)
|
2024-09-03 03:18:08 +00:00
|
|
|
if (a ~= 18) { printf "ERROR: a must be 18\n"; } \
|
2024-09-18 12:41:00 +00:00
|
|
|
else { printf "OK %d\n" a; }
|
2024-01-01 16:41:41 +00:00
|
|
|
|
2024-09-18 12:41:00 +00:00
|
|
|
b := (B:newInstance 2 3 4)
|
|
|
|
a := (b:get-a)
|
2024-09-03 03:18:08 +00:00
|
|
|
if (a ~= 4) {printf "ERROR: a must be 4\n" } \
|
2024-09-18 12:41:00 +00:00
|
|
|
else { printf "OK %d\n" a }
|
|
|
|
|
|
|
|
c := (object-new A)
|
|
|
|
a := (c:get-a)
|
|
|
|
if (a ~= nil) {printf "ERROR: a must be nil\n" } \
|
|
|
|
else { printf "OK %O\n" a }
|
|
|
|
|
2024-01-01 16:41:41 +00:00
|
|
|
|
2024-02-07 16:39:21 +00:00
|
|
|
a := (b:get-b);
|
2024-09-03 03:18:08 +00:00
|
|
|
if (a ~= 6) { printf "ERROR: a must be 6\n" } \
|
2024-01-14 15:47:01 +00:00
|
|
|
else { printf "OK %d\n" a };
|
2024-01-01 16:41:41 +00:00
|
|
|
|
2024-02-07 16:39:21 +00:00
|
|
|
a := (b:get-c);
|
2024-09-03 03:18:08 +00:00
|
|
|
if (a ~= 8) { printf "ERROR: a must be 8\n" } \
|
2024-01-14 15:47:01 +00:00
|
|
|
else {printf "OK %d\n" a };
|
2024-01-01 16:41:41 +00:00
|
|
|
|
2024-02-07 16:39:21 +00:00
|
|
|
a := (b:sum);
|
2024-09-03 03:18:08 +00:00
|
|
|
if (a ~= 27) { printf "ERROR: a must be 27\n" } \
|
2024-01-14 15:47:01 +00:00
|
|
|
else { printf "OK %d\n" a };
|
2024-02-07 16:39:21 +00:00
|
|
|
|
|
|
|
## super is equivalent to self unless a message is sent to it.
|
|
|
|
## if super itself is returned without a message, it just return
|
|
|
|
## the receiver just like self. To get the superclass, it must use
|
|
|
|
## the superclass method inherited from the Class class.
|
|
|
|
|
|
|
|
b := (B:getSelf)
|
|
|
|
a := (B:getSuper)
|
|
|
|
##c := (B:getSuperlcass)
|
|
|
|
|
|
|
|
if (nqv? a b) { printf "ERROR: a is not equivalent to b\n" } \
|
|
|
|
else { printf "OK a is equivalent to b\n" };
|
|
|
|
|
|
|
|
##if (eqv? a c) { printf "ERROR: a is equivalent to b\n" } \
|
|
|
|
##else { printf "OK a is not equivalent to b\n" };
|
|
|
|
|
|
|
|
if (nqv? a B) { printf "ERROR: a is not equivalent to B\n" } \
|
|
|
|
else { printf "OK a is equivalent to A\n" };
|
|
|
|
|
|
|
|
if (nqv? b B) { printf "ERROR: b is not equivalent to B\n" } \
|
|
|
|
else { printf "OK b is equivalent to B\n" };
|
|
|
|
|
|
|
|
##if (nqv? c A) { printf "ERROR: c is not equivalent to A\n" } \
|
|
|
|
##else { printf "OK c is equivalent to A\n" };
|