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_InputCombinatorsI3Times_ReturnsCombinatorStringification()
 {
     var term1 = CombinatorI.ConstructCombinator();
     var term2 = CombinatorI.ConstructCombinator();
     var term3 = CombinatorI.ConstructCombinator();
     var extepctedResult = Term.BuildWith(new Term[] { term1 });
     var expected = extepctedResult.Stringify();
     var reductionResult = Term.EvaluateWith(new Term[] { term1, term2, term3 });
     var result = reductionResult.Stringify();
     Assert.AreEqual(expected, result);
 }
        public void TermReductionTest_InputCombinatorI_ReturnsSameStringification()
        {

            var term1 = CombinatorI.ConstructCombinator();
            var buildResult = Term.BuildWith(new Term[] { term1 });
            var expected = buildResult.Stringify();
       
            var evalResult = Term.EvaluateWith(new Term[] { term1 });
            var result = evalResult.Stringify();
            Assert.AreEqual(expected, result);
        }
        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());
        }
        public void TermReductionTest_InputCombinatorIAndConstant_ReturnsConstantStringification()
        {
            var term1 = CombinatorI.ConstructCombinator();
            string name = "const";
            var term2 = new Constant(name);

            var extepctedResult = Term.BuildWith(new Term[] { term2 });
            var expected = extepctedResult.Stringify();
            var reductionResult = Term.EvaluateWith(new Term[] { term1, term2 });
            var result = reductionResult.Stringify();
            Assert.AreEqual(expected, result);
        }