Allow script arrays to hold any value type, add script engine tests, archive old rpg code
Remove the per-array type category so arrays can mix types like structs. Add 13 passing and 125 expected-failure duskscript test fixtures with a table-driven runner. Also includes the in-progress entity/physics and archive moves from the working tree. Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
This commit is contained in:
1 parent
5c259e46e2
commit
f6b884bf7f
710 files changed
+6172
-27594
No files matched your search
@@ -0,0 +1,85 @@
|
||||
// Truthiness
|
||||
assert(true);
|
||||
assert(!false);
|
||||
assert(1);
|
||||
assert(-1);
|
||||
assert(0.5);
|
||||
assert(!0);
|
||||
assert("text");
|
||||
assert(!"");
|
||||
assert(!null);
|
||||
assert(!undefined);
|
||||
assert([1]);
|
||||
assert(!isnull(1));
|
||||
assert({});
|
||||
assert(!!1);
|
||||
assert(!!"a");
|
||||
assert(!!{});
|
||||
assert(![]);
|
||||
assert(!(!true));
|
||||
|
||||
// And, or and not give bools
|
||||
assert((1 && 2) == true);
|
||||
assert((0 && 2) == false);
|
||||
assert(("a" || "b") == true);
|
||||
assert((0 || "b") == true);
|
||||
assert((0 || 0) == false);
|
||||
assert((null || undefined) == false);
|
||||
assert((true && true) == true);
|
||||
assert((true && false) == false);
|
||||
assert((false || true) == true);
|
||||
assert((false || false) == false);
|
||||
|
||||
// Precedence: && binds tighter than ||
|
||||
assert((true || false && false) == true);
|
||||
assert(((true || false) && false) == false);
|
||||
assert((false && true || true) == true);
|
||||
|
||||
// Short circuit: the right side never runs when the left decides
|
||||
var calls = 0;
|
||||
function bump() {
|
||||
calls++;
|
||||
return true;
|
||||
}
|
||||
var r = false && bump();
|
||||
assert(calls == 0);
|
||||
r = true || bump();
|
||||
assert(calls == 0);
|
||||
r = true && bump();
|
||||
assert(calls == 1);
|
||||
r = false || bump();
|
||||
assert(calls == 2);
|
||||
r = (1 > 2) && bump();
|
||||
assert(calls == 2);
|
||||
|
||||
// Guarding an operation that would fail
|
||||
var none = [];
|
||||
assert(!(len(none) > 0 && none[0] == 1));
|
||||
var holder = {value: null};
|
||||
assert(!(!isnull(holder.value) && holder.value > 1));
|
||||
|
||||
// Equality of different types is false, never an error
|
||||
assert(1 != "1");
|
||||
assert(true != 1);
|
||||
assert(null != 0);
|
||||
assert(null != false);
|
||||
assert(null != "");
|
||||
assert(null != undefined);
|
||||
assert(null == null);
|
||||
assert(undefined == undefined);
|
||||
assert([] != "");
|
||||
assert({} != []);
|
||||
|
||||
// Arrays, structs and functions compare by identity
|
||||
var a = [1];
|
||||
var b = [1];
|
||||
var c = a;
|
||||
assert(a != b);
|
||||
assert(a == c);
|
||||
var sa = {k: 1};
|
||||
var sb = {k: 1};
|
||||
var sc = sa;
|
||||
assert(sa != sb);
|
||||
assert(sa == sc);
|
||||
assert(bump == bump);
|
||||
assert(bump != isnull);
|
||||
Reference in new issue
Block a user