// 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);