Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }