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]>
86 lines
1.8 KiB
Plaintext
86 lines
1.8 KiB
Plaintext
// 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);
|