nondescript/tests/controlflow.nds

135 lines
1.9 KiB
Plaintext

// tests for basic control flow constructs
// if, else
//expect:true
if (true) {
print ("true");
};
if (false) {
print ("false");
};
// return the condition if falsy
//expect:nil
print (if (nil) 5);
//expect:false
print (if (false) 5);
// return body if truthy
//expect:5.0
print (if (true) 5);
// return else body if falsey and present
//expect:6.0
print (if (false) 5 else 6);
// but still only return the if body if truthy
//expect:4.0
print (if (true) 4 else 6);
// elseif chains
//expect:4.0
print (if (false) 1 else if (false) 2 else if (false) 3 else if (true) 4 else if (false) 5 else 8);
// falsiness, truthiness
// false and nil are falsey
var uninitialized;
if (false) print ("don't see this");
if (nil) print ("don't see this");
if (uninitialized) print ("don't see this");
// the rest of the types are truthy
if (true) print ("1");
if ("") print ("2");
if ("hello") print ("3");
if (0) print ("4");
if (1) print ("5");
if (@[]) print ("6");
if (@["hi"]) print ("7");
if (@{}) print ("8");
if (@{["hi"] = 5}) print ("9");
if (proc(n) print (n)) print ("10");
//expect:1
//expect:2
//expect:3
//expect:4
//expect:5
//expect:6
//expect:7
//expect:8
//expect:9
//expect:10
// and, or
// and returns the left one if it's falsey or the right one if the left one is truthy
//expect:false
print (false and 5);
//expect:5.0
print (true and 5);
// or returns the leftmost truthy
//expect:5.0
print (false or false or false or false or 5 or false or 7);
//expect:true
print (true or false);
// while
// basic looping examples
var i = 1;
while (i < 300) {
i = i + 1;
};
print (i); //expect:300.0
i = 5;
while (i > 0)
print (i = i - 1)
;
//expect:4.0
//expect:3.0
//expect:2.0
//expect:1.0
//expect:0.0
// while returns the result of the last iteration
i = 5;
var res = while (i > 0)
i = i - 1
;
//expect:0.0
print (res);
// if no iterations are done, it returns nil
res = while (false)
i = 6
;
//expect:nil
print (res);