summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--npc/custom/test.txt65
1 files changed, 63 insertions, 2 deletions
diff --git a/npc/custom/test.txt b/npc/custom/test.txt
index 07523f008..d13570135 100644
--- a/npc/custom/test.txt
+++ b/npc/custom/test.txt
@@ -41,6 +41,11 @@ OnCheckStr:
OnInit:
.errors = 0;
+ // Callsub (basic)
+ callsub(OnCheck, "Callsub", 1, 1);
+ callsub(OnCheck, "Callsub (getarg default values)", 1);
+
+
// Array subscript
setarray .@a, 3, 2, 1;
callsub(OnCheck, "Array subscript", .@a[2]);
@@ -520,11 +525,67 @@ OnInit:
callsub(OnCheck, "setd getd", .@x, .@y);
+ // Callsub (advanced)
+ callsub(OnCheck, "Callsub return value", callsub(OnTestReturnValue, 1));
+ .@x = 1;
+ callsub(OnCheck, "Callsub return with scope variables", callsub(OnTestScopeVars), 3);
+ callsub(OnCheck, "Callsub (parent scope vars isolation)", .@x, 1);
+ callsub(OnCheck, "Callsub (nested scopes)", callsub(OnTestNestedScope), 1);
+ callsub(OnCheck, "Callsub (deeply nested scopes)", callsub(OnTestDeepNestedScope, 30, 0), 1);
+ deletearray .@x;
+ setarray .@x, 1, 2, 3, 4;
+ callsub(OnCheck, "Callsub (array references)", callsub(OnTestArrayRefs, .@x), 4);
+ deletearray .@x;
+ .@y = callsub(OnTestReturnArrayRef, .@x);
+ callsub(OnCheck, "Callsub return array references (size check)", getarraysize(.@x), .@y);
+ callsub(OnCheck, "Callsub return array references", getelementofarray(.@x, 3), 8);
+ deletearray .@x;
+ deletearray .@y;
+ setarray .@x, 1, 2;
+ .@z = getarraysize(.@x);
+ setarray .@y, 5, 6, 7, 8, 9;
+ callsub(OnCheck, "Callsub (copyarray from reference with the same name)", getarraysize(.@y), callsub(OnTestScopeArrays, .@y));
+ callsub(OnCheck, "Callsub (parent array vars isolation)", getarraysize(.@x), .@z);
+
+
if (.errors) {
- debugmes "Script engine self-test [ FAILED ]";
+ debugmes "Script engine self-test [ \033[0;31mFAILED\033[0m ]";
debugmes "**** The test was completed with " + .errors + " errors. ****";
} else {
- debugmes "Script engine self-test [ PASSED ]";
+ debugmes "Script engine self-test [ \033[0;32mPASSED\033[0m ]";
}
+ end;
+
+OnTestReturnValue:
+ return getarg(0);
+
+OnTestScopeVars:
+ .@x = 2;
+ return .@x+1;
+
+OnTestDeepNestedScope:
+ if (getarg(0) <= 0)
+ return getarg(1); // Stop recursion
+ if (getarg(1))
+ return callsub(OnTestDeepNestedScope, getarg(0)-1, getarg(1)); // Recursion step
+ .@x = 1;
+ return callsub(OnTestDeepNestedScope, getarg(0)-1, .@x); // First step
+
+OnTestNestedScope:
+ .@x = 1;
+ .@y = callsub(OnTestReturnValue, .@x);
+ return .@y;
+
+OnTestArrayRefs:
+ return getelementofarray(getarg(0), getarraysize(getarg(0)) - 1);
+
+OnTestReturnArrayRef:
+ setarray getarg(0), 5, 6, 7, 8;
+ return getarraysize(getarg(0));
+
+OnTestScopeArrays:
+ setarray .@x, 1, 2, 3, 4;
+ copyarray .@y, getarg(0), getarraysize(getarg(0));
+ return getarraysize(.@y);
}