public void TestFunctionK()
        {
            var zero = new FunctionZero();
            var one = new FunctionSucc().exec(zero);
            var two = new FunctionDbl().exec(one);
            var four = new FunctionDbl().exec(two);

            var Kpart = new FunctionK().exec(four);
            Assert.AreEqual(false, Kpart.isDigit());

            var final = Kpart.exec(two);

            Assert.AreEqual(true, final.isDigit());
            Assert.AreEqual(4, (final as Digit).digit);
        }
        public void TestFunctionS()
        {
            var eng = new Engine.BaseTypes.Engine(0);

            var cell = eng.getPlayerCells()[2];
            cell.setValue(new FunctionDbl());

            var zero = new FunctionZero();
            var one = new FunctionSucc().exec(zero);
            var two = new FunctionDbl().exec(one);

            var g = new FunctionDbl();

            var f = new FunctionGet();

            var part1 = new FunctionS().exec(f);
            var part2 = part1.exec(g);
            var res = part2.exec(two);

            Assert.AreEqual(true, res.isDigit());
            Assert.AreEqual(8, (res as Digit).digit);
        }
        public void TestFunctionsComposition()
        {
            var zero = new FunctionZero();
            var succ = new FunctionSucc();

            var res = succ.exec(zero);
            var idn = new FunctionI().exec(res);
            var dubl = new FunctionDbl().exec(idn);

            Assert.AreEqual(1, (res as Digit).digit);
            Assert.AreEqual(1, (idn as Digit).digit);
            Assert.AreEqual(2, (dubl as Digit).digit);
        }
        public void TestFunctionsSuccAndDbl()
        {
            var funf = new Digit(5);
            var succ = new FunctionSucc();
            var res = succ.exec(funf);

            Assert.AreEqual(true, res.isDigit());
            Assert.AreEqual(6, (res as Digit).digit);

            var dbl = new FunctionDbl();
            var res2 = dbl.exec(funf);

            Assert.AreEqual(true, res2.isDigit());
            Assert.AreEqual(10, (res2 as Digit).digit);
        }