2024-01-02 15:45:34 +00:00
|
|
|
|
2024-01-14 15:47:01 +00:00
|
|
|
(fun() {
|
2023-11-11 08:57:18 +00:00
|
|
|
## test return variables
|
2022-02-19 16:57:06 +00:00
|
|
|
|
2022-02-21 16:07:55 +00:00
|
|
|
| v1 v2 v3 i a b c d |
|
2022-02-19 16:57:06 +00:00
|
|
|
|
2024-01-02 15:45:34 +00:00
|
|
|
set i 100;
|
2022-02-19 16:57:06 +00:00
|
|
|
|
2024-02-03 16:57:53 +00:00
|
|
|
defun ff(a b :: x y z) {
|
2024-01-02 15:45:34 +00:00
|
|
|
set x (+ a b i);
|
|
|
|
set y (+ x x);
|
|
|
|
set z (+ 999 i);
|
|
|
|
set i (* i 10);
|
|
|
|
};
|
2022-02-19 16:57:06 +00:00
|
|
|
|
2024-01-14 15:47:01 +00:00
|
|
|
set-r v1 v2 v3 (ff 10 20);
|
|
|
|
if (/= v1 130) { printf "ERROR: v1 must be 130\n" };
|
|
|
|
if (/= v2 260) { printf "ERROR: v2 must be 260\n" };
|
|
|
|
if (/= v3 1099) { printf "ERROR: v3 must be 1099\n" };
|
|
|
|
printf "OK v1=%d v2=%d v3=%d\n" v1 v2 v3;
|
2022-02-19 16:57:06 +00:00
|
|
|
|
2024-01-14 15:47:01 +00:00
|
|
|
set-r v1 v2 (ff 1 2); ## using 2 return variables only. not assigning to v3
|
|
|
|
if (/= v1 1003) { printf "ERROR: v1 must be 1003\n" };
|
|
|
|
if (/= v2 2006) { printf "ERROR: v2 must be 2006\n" };
|
|
|
|
if (/= v3 1099) { printf "ERROR: v3 must be 1099\n" };
|
|
|
|
printf "OK v1=%d v2=%d v3=%d\n" v1 v2 v3;
|
2022-02-21 16:07:55 +00:00
|
|
|
|
|
|
|
|
2023-11-11 08:57:18 +00:00
|
|
|
## test return variables in message sends
|
2024-07-09 14:44:24 +00:00
|
|
|
defclass B [ [X1 X2] ] {
|
2022-02-21 16:07:55 +00:00
|
|
|
|
2024-01-02 15:45:34 +00:00
|
|
|
set X1 999;
|
|
|
|
set X2 888;
|
2022-02-21 16:07:55 +00:00
|
|
|
|
2024-02-03 16:57:53 +00:00
|
|
|
defun :: get ( :: x y) {
|
2024-01-14 15:47:01 +00:00
|
|
|
set x X1;
|
|
|
|
set y X2;
|
2024-01-02 15:45:34 +00:00
|
|
|
};
|
2022-02-21 16:07:55 +00:00
|
|
|
|
2024-02-03 16:57:53 +00:00
|
|
|
defun :: get2 (inc :: x y) {
|
2024-01-14 15:47:01 +00:00
|
|
|
set x (+ X1 inc);
|
|
|
|
set y (+ X2 inc);
|
2024-01-02 15:45:34 +00:00
|
|
|
};
|
|
|
|
};
|
2022-02-21 16:07:55 +00:00
|
|
|
|
2024-01-14 15:47:01 +00:00
|
|
|
set-r a b (B:get);
|
|
|
|
set-r c d (B:get2 -100);
|
2022-02-21 16:07:55 +00:00
|
|
|
|
2024-01-14 15:47:01 +00:00
|
|
|
if (/= a 999) { printf "ERROR: a must be 999\n" };
|
|
|
|
if (/= b 888) { printf "ERROR: b must be 888\n" };
|
|
|
|
if (/= c 899) { printf "ERROR: c must be 899\n" };
|
|
|
|
if (/= d 788) { printf "ERROR: d must be 788\n" };
|
2022-02-21 16:07:55 +00:00
|
|
|
|
2024-01-02 15:45:34 +00:00
|
|
|
printf "OK a=%d b=%d c=%d d=%d\n" a b c d;
|
2024-08-29 10:05:21 +00:00
|
|
|
|
|
|
|
class X [ x, y ] {
|
|
|
|
fun ::f(a :: b c) { b := (a + 10); c := (a + 20) }
|
|
|
|
|
|
|
|
fun :*new(z) {
|
|
|
|
## multi-variable assignment with return variables to member variables
|
|
|
|
[self.x, self.y] := (X:f z)
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
fun getX() { return self.x }
|
|
|
|
fun getY() { return self.y }
|
|
|
|
}
|
|
|
|
|
|
|
|
z := (X:new 9)
|
|
|
|
if ((x := (z:getX)) /= 19) { printf "ERROR: z:getX msut return 19\n" }
|
|
|
|
if ((y := (z:getY)) /= 29) { printf "ERROR: z:getX msut return 29\n" }
|
|
|
|
printf "OK z:getX=%d z:getY=%d\n" x y
|
2024-01-14 15:47:01 +00:00
|
|
|
});
|