public void GetNextNodeLRPTest_Input5ElementTerm_ReturnsListOf4InReversedOrder()
        {
            var kTerm = CombinatorK.ConstructCombinator();
            var iTerm = CombinatorI.ConstructCombinator();

            string name3             = "rumba";
            var    term3             = new Constant(name3);
            string name4             = "spinner";
            var    term4             = new Constant(name4);
            string name5             = "vape";
            var    term5             = new Constant(name5);
            var    startingTermsList = new Term[] { kTerm, iTerm, term3, term4, term5 };
            var    term   = Term.BuildWith(startingTermsList);
            var    result = new List <Term>();

            term = TreeTraversal.GetLowestLeftNode(term);
            for (int i = 0; i < startingTermsList.Length - 1; i++)
            {
                term = TreeTraversal.GetNextNodeLRP(term);
                result.Add(term);
            }
            Assert.Multiple(() =>
            {
                Assert.AreEqual(iTerm.Stringify(), result[0].Stringify());
                Assert.AreEqual(term3.Stringify(), result[1].Stringify());
                Assert.AreEqual(term4.Stringify(), result[2].Stringify());
                Assert.AreEqual(term5.Stringify(), result[3].Stringify());
            });
        }
        public void TermReductionTest_InputCombinatorK_ReturnsSameStringificationResult()
        {
            var term1           = CombinatorK.ConstructCombinator();
            var expected        = term1.Stringify();
            var reductionResult = Term.BuildWith(new Term[] { term1 }).Reduce();
            var result          = term1.Stringify();

            Assert.AreEqual(expected, result);
        }
        public void GetLowestLeftTerm_Input1ElementTerm_ReturnsTheElement()
        {
            var kTerm             = CombinatorK.ConstructCombinator();
            var startingTermsList = new Term[] { kTerm, };
            var term   = Term.BuildWith(startingTermsList);
            var result = TreeTraversal.GetLowestLeftNode(term);

            Assert.AreEqual(result.Stringify(), kTerm.Stringify());
        }
        public void TermReductionTest_InputNormalForms_ReturnsSameStringificationResult()
        {
            var term1    = CombinatorK.ConstructCombinator();
            var expected = Term.BuildWith(new Term[] { term1 });

            var result    = Term.EvaluateWith(new Term[] { term1 });
            var resultStr = result.Stringify();

            Assert.AreEqual(expected.ToString(), resultStr);
        }
        private static void EvaluateAndPrintSKKx()
        {
            var S  = CombinatorS.ConstructCombinator();
            var Ka = CombinatorK.ConstructCombinator();
            var Kb = CombinatorK.ConstructCombinator();
            var x  = new Constant("x");

            Console.WriteLine($"Evaluating term {S} {Ka} {Kb} {x}");
            Term.EvaluateWith(new Term[] { S, Ka, Kb, x }).Dump();
            Whitespace();
        }
        private static void EvaluateAndPrintKxx()
        {
            var K   = CombinatorK.ConstructCombinator();
            var one = new Constant("1");
            var two = new Constant("2");

            Console.WriteLine($"Evaluating term {K} {one} {two}");
            var stmt2 = Term.EvaluateWith(new Term[] { K, one, two }).Dump();

            Whitespace();
        }
        public void TermReductionTest_InputSKIX_ReturnsTermX()
        {
            var S            = CombinatorS.ConstructCombinator();
            var K            = CombinatorK.ConstructCombinator();
            var I            = CombinatorI.ConstructCombinator();
            var x            = new Variable("x");
            var expectedTerm = Term.BuildWith(new Term[] { x });
            var resultTerm   = Term.EvaluateWith(new Term[] { S, K, I, x });

            Assert.AreEqual(expectedTerm.Stringify(), resultTerm.Stringify());
        }
        private static void test()
        {
            var kTerm  = CombinatorK.ConstructCombinator();
            var kTerm1 = CombinatorK.ConstructCombinator();
            var x      = new Constant("x");
            var y      = new Constant("y");
            var z      = new Constant("z");

            Console.WriteLine($"Evaluating {kTerm} {kTerm1} {x} {y} {z}");
            Term.EvaluateWith(new Term[] { kTerm, kTerm1, x, y, z }).Dump();
            Whitespace();
        }
        private static void EvaluateAndPrintTermWithCommas()
        {
            var kTerm     = CombinatorK.ConstructCombinator();
            var x         = new Variable("x");
            var y         = new Variable("y");
            var z         = new Variable("z");
            var tupleTerm = new Term(y, z);

            Console.WriteLine($"Evaluating {kTerm} ({y} {z}) {x}");
            Console.WriteLine("After evaluation:");
            Term.EvaluateWith(new Term[] { kTerm, tupleTerm, x }).Dump();
            Whitespace();
        }
Ejemplo n.º 10
0
 public void StringifyLongTerm_Input5ElementArray_Returns5ElementTermRepresentation()
 {
     var    KTerm    = CombinatorK.ConstructCombinator();
     var    name1    = "drake";
     var    term1    = new Constant(name1);
     var    name2    = "kanye";
     var    term2    = new Constant(name2);
     string expected = $"((((K,K),K),{name1}),{name2})";
     var    term     = Term.BuildWith(new Term[]
     {
         KTerm, KTerm, KTerm, term1, term2
     });
 }
        public void TermReductionTest_InputNonLinearTermAltOrder_ReturnsCorrectlyRecudedTerm()
        {
            var name2     = "kyle";
            var name3     = "jacquline";
            var name4     = "trish";
            var kTerm     = CombinatorK.ConstructCombinator();
            var termKyle  = new Constant(name2);
            var expected  = Term.BuildWith(new Term[] { termKyle }).Stringify();
            var termTwins = new Term(new Constant(name3), new Constant(name4));
            var term      = Term.EvaluateWith(new Term[] { kTerm, termKyle, termTwins });

            Assert.AreEqual(expected, term.ToString());
        }
        public void TermReductionTest_InputReducableTermWithKCombinator_ReturnsReducedTerm()
        {
            var    kTerm           = CombinatorK.ConstructCombinator();
            string name2           = "pupa";
            var    term2           = new Constant(name2);
            string name3           = "lupa";
            var    term3           = new Constant(name3);
            var    expected        = Term.BuildWith(new Term[] { term2 }).Stringify();
            var    reductionResult = Term.EvaluateWith(new Term[] { kTerm, term2, term3 });
            var    resultStr       = reductionResult.Stringify();

            Assert.AreEqual(expected, resultStr);
        }
Ejemplo n.º 13
0
        public void StringifyMidrangeTerm_Imput3ElementArray_Returns3ElementTermRepresentation()
        {
            var    term1    = CombinatorK.ConstructCombinator();
            var    name2    = "mtn_dew";
            var    term2    = new Constant(name2);
            var    name3    = "bepis";
            var    term3    = new Constant(name3);
            string expected = $"((K,{name2}),{name3})";
            var    term     = Term.BuildWith(new Term[] { term1, term2, term3 });
            var    result   = term.Stringify();

            Assert.AreEqual(expected, result);
        }
        public void GetLowestLeftTerm_Input5ElementTerm_ReturnsFirstAddedTerm()
        {
            var kTerm  = CombinatorK.ConstructCombinator();
            var kTerm1 = CombinatorK.ConstructCombinator();

            string name3             = "rumba";
            var    term3             = new Constant(name3);
            string name4             = "spinner";
            var    term4             = new Constant(name4);
            string name5             = "vape";
            var    term5             = new Constant(name5);
            var    startingTermsList = new Term[] { kTerm, kTerm1, term3, term4, term5 };
            var    term   = Term.BuildWith(startingTermsList);
            var    result = TreeTraversal.GetLowestLeftNode(term);

            Assert.AreEqual(result.Stringify(), kTerm.Stringify());
        }
Ejemplo n.º 15
0
        public void StringifyLongTerm_Input5ElementArrayv2_Returns5ElementTermRepresentation()
        {
            var kTerm  = CombinatorK.ConstructCombinator();
            var kTerm1 = CombinatorK.ConstructCombinator();

            string name3    = "rumba";
            var    term3    = new Constant(name3);
            string name4    = "spinner";
            var    term4    = new Constant(name4);
            string name5    = "vape";
            var    term5    = new Constant(name5);
            var    expected = $"((((K,K),{name3}),{name4}),{name5})";
            var    result   = Term.BuildWith(new Term[]
                                             { kTerm, kTerm1, term3, term4, term5 });

            Assert.AreEqual(expected, result.Stringify());
        }
        public void TermReductionTest_InputReducableTermWith2KCombinators_ReturnsReducedTerm()
        {
            var kTerm  = CombinatorK.ConstructCombinator();
            var kTerm1 = CombinatorK.ConstructCombinator();

            string name3 = "rumba";
            var    term3 = new Constant(name3);
            string name4 = "spinner";
            var    term4 = new Constant(name4);
            string name5 = "vape";
            var    term5 = new Constant(name5);

            var expected = Term.BuildWith(new Term[] { term4 }).Stringify();
            var result   = Term.EvaluateWith(new Term[]
                                             { kTerm, kTerm1, term3, term4, term5 });

            Assert.AreEqual(expected, result.Stringify());
        }
        public void TermReductionTest_InputReducableNonLinearlyTermWith2KCombinators_ReturnsReducedTerm()
        {
            var kTerm  = CombinatorK.ConstructCombinator();
            var kTerm1 = CombinatorK.ConstructCombinator();

            string name3 = "egg";
            var    term3 = new Constant(name3);
            string name4 = "long egg";
            var    term4 = new Constant(name4);
            string name5 = "applause";
            var    term5 = new Constant(name5);
            string name6 = "gone";
            var    term6 = new Constant(name6);


            var expected = Term.BuildWith(new Term[] { term3, term5 }).Stringify();
            var result   = Term.EvaluateWith(new Term[] { kTerm, term3, term4, kTerm1, term5, term6 });

            Assert.AreEqual(expected, result.Stringify());
        }