static void TestMax() { var source = @" max @ (first, second) ( if first > second then ( return first; ) else ( return second; ); ); a = max(5, 6); b = max(-2, -3); c = max(a, b + 9); "; var env = new Interpreter.Environment.DefaultEnvironment(); var block = Parser.Parser.ParseCode(source); env.Execute(block); Assert(((IntegralValue)env.GlobalScope["a"]).Value == 6); Assert(((IntegralValue)env.GlobalScope["b"]).Value == -2); Assert(((IntegralValue)env.GlobalScope["c"]).Value == 7); }
static void TestFib() { var source = @" fib @ (amount) ( if amount ? 0 then (return 0;); if amount ? 1 then (return 1;); return fib(amount - 1) + fib(amount - 2); ); f0 = fib(0); f1 = fib(1); f2 = fib(2); f3 = fib(3); f4 = fib(4); "; var env = new Interpreter.Environment.DefaultEnvironment(); var block = Parser.Parser.ParseCode(source); env.Execute(block); Assert(((IntegralValue)env.GlobalScope["f0"]).Value == 0); Assert(((IntegralValue)env.GlobalScope["f1"]).Value == 1); Assert(((IntegralValue)env.GlobalScope["f2"]).Value == 1); Assert(((IntegralValue)env.GlobalScope["f3"]).Value == 2); Assert(((IntegralValue)env.GlobalScope["f4"]).Value == 3); }
static void TestBinsearch() { var source = @" binfind @ (data, count, item) ( if count ? 0 then (return none;); left = 0; right = count - 1; while left < right do ( middle = (left + right) / 2 + 1; if data(middle) ? item then ( return middle; ); if data(middle) > item then ( right = middle - 1; ) else ( left = middle + 1; ); ); if data(left) ? item then (return left;) else (return none;); ); nums = vector(); i = 0; while i ! 10 do ( nums(i, 10 * i); i = i + 1; ); k = binfind(nums, 10, 70); "; var env = new Interpreter.Environment.DefaultEnvironment(); var block = Parser.Parser.ParseCode(source); env.Execute(block); Assert(((IntegralValue)env.GlobalScope["k"]).Value == 7); }
static void TestNim() { var source = @" nim @ (matches) ( whole = (matches / 4) * 4; remove = matches - whole; if remove ! 0 then (return remove;) else (return 1;); ); m0 = 21; m1 = m0 - nim(m0); m2 = m1 - nim(m1); m3 = m2 - nim(m2); m4 = m3 - nim(m3); m5 = m4 - nim(m4); "; var env = new Interpreter.Environment.DefaultEnvironment(); var block = Parser.Parser.ParseCode(source); env.Execute(block); Assert(((IntegralValue)env.GlobalScope["m1"]).Value == 20); Assert(((IntegralValue)env.GlobalScope["m3"]).Value == 16); Assert(((IntegralValue)env.GlobalScope["m5"]).Value == 12); }