public void CreateItemReturningItem_WithNoFactory_Fails()
        {
            var id = new Mock<IIdentifier>().Object;

            IEquationBuilder builder = new EquationBuilder();

            IItem item;
            builder.CreateItem(id, out item);
        }
        public void CreateItemReturningItem_WithFactoryAndUnknownIdentifier_Fails()
        {
            var id = new Mock<IIdentifier>().Object;
            var factory = new Mock<IFactory>();
            factory.Setup(o => o.CanCreate(id)).Returns(false);
            IEquationBuilder builder = new EquationBuilder(new[] { factory.Object });

            IItem item;
            builder.CreateItem(id, out item);
        }
        public void Factory_PlugedInTheEquationBuilder_CanBeUsedToCreateSquareRoot()
        {
            var factory = new AdvancedMathOperatorsFactory();
            var builder = new EquationBuilder(new[] { factory });

            builder = builder.CreateItem<EquationBuilder>(AdvancedMathOperators.SquareRoot);

            var tree = builder.ToImmutableTree();
            var rootValue = tree.ValueOf(tree.GetRoot());
            Assert.AreEqual("SquareRoot", rootValue);
        }
示例#4
0
        public void EquationToStringTest()
        {
            IEquationBuilder equationBuilder = new EquationBuilder(new BracketOpener(), new SummandBuilder());

            string inputEquation = "(5x+ 5y)/5 -x^2=1";

            var equation = equationBuilder.Create(inputEquation);

            equation.Processing();

            Assert.AreEqual(equation.ToString(), "- x^2 + x + y - 1 = 0");
        }
        public void CreateItemReturningItem_WithFactoriesThatCanCreateSameItem_Fails()
        {
            var id = new Mock<IIdentifier>().Object;
            var item = new Mock<IItem>().Object;
            var factory = new Mock<IFactory>();
            factory.Setup(o => o.CanCreate(id)).Returns(true);
            factory.Setup(o => o.Create(id)).Returns(item);
            IEquationBuilder builder = new EquationBuilder(new[] { factory.Object, factory.Object });

            IItem createItem;
            builder.CreateItem(id, out createItem);
        }
        public void EquationBuildAndProcessing()
        {
            IEquationBuilder equationBuilder = new EquationBuilder(new BracketOpener(), new SummandBuilder());

            string inputEquation = "x^2 + 2y = 2((2x-1)/2 + 2.5(x + y^2) - 7.11)";

            var expectedLeft = new List <Summand>
            {
                new Summand {
                    Multiplier = 1, Variables = new List <Variable> {
                        new Variable {
                            Exponent = 2, Letter = 'x'
                        }
                    }
                },
                new Summand {
                    Multiplier = -7, Variables = new List <Variable> {
                        new Variable {
                            Exponent = 1, Letter = 'x'
                        }
                    }
                },
                new Summand {
                    Multiplier = -5, Variables = new List <Variable> {
                        new Variable {
                            Exponent = 2, Letter = 'y'
                        }
                    }
                },
                new Summand {
                    Multiplier = 2, Variables = new List <Variable> {
                        new Variable {
                            Exponent = 1, Letter = 'y'
                        }
                    }
                },
                new Summand {
                    Multiplier = 15.22, Variables = new List <Variable>()
                }
            };

            expectedLeft = expectedLeft.OrderByDescending(x => x).ToList();

            var equation = equationBuilder.Create(inputEquation);

            equation.Processing();

            Assert.IsNotNull(equation);
            Assert.IsTrue(expectedLeft.SequenceEqual(equation.LeftSide));
            Assert.IsTrue(equation.RightSide.Count == 0);
        }
        public void CreateItemReturningItem_WithFactoryAndKnownIdentifier_ReturnsTheNewItem()
        {
            var id = new Mock<IIdentifier>().Object;
            var item = new Mock<IItem>().Object;
            var factory = new Mock<IFactory>();
            factory.Setup(o => o.CanCreate(id)).Returns(true);
            factory.Setup(o => o.Create(id)).Returns(item);
            IEquationBuilder builder = new EquationBuilder(new[] { factory.Object });

            IItem createItem;
            builder.CreateItem(id, out createItem);

            Assert.AreEqual(item, createItem);
        }
示例#8
0
        static void Main(string[] args)
        {
            IBracketOpener   bracketOpener   = new BracketOpener();
            ISummandBuilder  summandBuilder  = new SummandBuilder();
            IEquationBuilder equationBuilder = new EquationBuilder(bracketOpener, summandBuilder);

            IEquationIO equationIo;

            if (args.Length == 0)
            {
                equationIo = new EquationConsoleIO(equationBuilder);
            }
            else
            {
                equationIo = new EquationFileIO(equationBuilder, args[0]);
            }

            equationIo.Begin();

            Console.ReadKey();
        }
        public void Parentheses_WithExpressionAndFactory_AllowsCreatingNewItemsInsideExpression()
        {
            var id = new Mock<IIdentifier>().Object;
            var item = new Mock<IItem>().Object;
            var factory = new Mock<IFactory>(MockBehavior.Strict);
            factory.Setup(o => o.CanCreate(id)).Returns(true);
            factory.Setup(o => o.Create(id)).Returns(item);
            IEquationBuilder builder = new EquationBuilder(new[] { factory.Object });

            builder = builder.Parentheses(b => b.CreateItem(id));

            factory.VerifyAll();
        }
        public void ToImmutableTree_WithTwoValues_ReturnsTreeWithRootAndTwoChildren()
        {
            IEquationBuilder builder = new EquationBuilder();
            builder = builder
                .Value(42)
                .Value(84);

            var tree = (builder as EquationBuilder).ToImmutableTree();

            var children = tree.GetChildren(tree.GetRoot());
            Assert.AreEqual(2, children.Count());
        }
        public void ToImmutableTree_WithParenthesesAndValue_ReturnsTreeWithParenthesesAndValue()
        {
            IEquationBuilder builder = new EquationBuilder();
            builder = builder.Parentheses(b => b.Value(3));

            var tree = (builder as EquationBuilder).ToImmutableTree();

            var parenthesis = tree.GetChildren(tree.GetRoot()).First();
            var value = tree.GetChildren(parenthesis).First();
            Assert.AreEqual("()", tree.ValueOf(parenthesis));
            Assert.AreEqual("3", tree.ValueOf(value));
        }
        public void ToImmutableTree_WithLiteral_ReturnsTreeWithRootAndChild()
        {
            IEquationBuilder builder = new EquationBuilder();
            builder = builder.Literal("x");

            var tree = (builder as EquationBuilder).ToImmutableTree();

            var children = tree.GetChildren(tree.GetRoot());
            Assert.AreEqual(1, children.Count());
        }
        public void ToImmutableTree_WithDivide_ReturnsTreeWithDivideOperator()
        {
            IEquationBuilder builder = new EquationBuilder();
            builder = builder.Divide();

            var tree = (builder as EquationBuilder).ToImmutableTree();

            var children = tree.GetChildren(tree.GetRoot());
            var divide = children.First();
            Assert.AreEqual("/", tree.ValueOf(divide));
        }
        public void ToImmutableTree_WithDivideWithValueExpression_ReturnsTreeWithDivideOperatorAndValue()
        {
            IEquationBuilder builder = new EquationBuilder();
            builder = builder.Divide(b => b.Value(3));

            var tree = (builder as EquationBuilder).ToImmutableTree();

            var divide = tree.GetChildren(tree.GetRoot()).First();
            var value = tree.GetChildren(divide).First();
            Assert.AreEqual("/", tree.ValueOf(divide));
            Assert.AreEqual("3", tree.ValueOf(value));
        }
        public void ToImmutableTree_WithAdd_ReturnsTreeWithAddOperator()
        {
            IEquationBuilder builder = new EquationBuilder();
            builder = builder.Add();

            var tree = (builder as EquationBuilder).ToImmutableTree();

            var children = tree.GetChildren(tree.GetRoot());
            var add = children.First();
            Assert.AreEqual("+", tree.ValueOf(add));
        }
        public void CreateItem_WithFactoryAndKnownIdentifier_ReturnsTheBuilder()
        {
            var id = new Mock<IIdentifier>().Object;
            var item = new Mock<IItem>().Object;
            var factory = new Mock<IFactory>();
            factory.Setup(o => o.CanCreate(id)).Returns(true);
            factory.Setup(o => o.Create(id)).Returns(item);
            IEquationBuilder builder = new EquationBuilder(new[] { factory.Object });

            var returnedBuilder = builder.CreateItem(id);

            Assert.AreEqual(builder, returnedBuilder);
        }
        public void CreateItem_WithNoFactory_Fails()
        {
            var id = new Mock<IIdentifier>().Object;

            IEquationBuilder builder = new EquationBuilder();

            builder.CreateItem(id);
        }
        public void IsConformWithIEquationBuilderDynamicContract()
        {
            var builder = new EquationBuilder();

            Assert.IsTrue(IEquationBuilderDynamicContractChecker.IsConform(builder));
        }
        public void ToImmutableTree_ForNotUsedBuilder_ReturnsTreeWithRoot()
        {
            IEquationBuilder builder = new EquationBuilder();

            var tree = (builder as EquationBuilder).ToImmutableTree();

            Assert.IsTrue(tree.KeyProvider.IsValid(tree.GetRoot()));
        }
        private void SnippentsThatDontBreakTheBuild()
        {
            {
                var builder = new EquationBuilder();

                builder
                    .Value(1)
                    .Add()
                    .Value(2);
            }

            {
                var builder = new EquationBuilder();

                builder
                    .Literal("x")
                    .Add()
                    .Literal("y");
            }

            {
                var builder = new MarkupEquationBuilder();

                builder
                    .Value(1)
                    .Add()
                    .Bold(b => b.Value(2))
                    .Add()
                    .Value(3);
            }

            {
                var builder = new MarkupEquationBuilder();

                builder
                    .Value(1)
                    .Add()
                    .Bold(b =>
                        {
                            b.Value(2)
                            .Add()
                            .Value(3);
                        })
                    .Add()
                    .Value(4);
            }

            {
                var builder = new MarkupEquationBuilder();

                builder
                    .Value(1)
                    .Add()
                    .Bold(b => b.Literal("x"))
                    .Add()
                    .Value(3);
            }

            {
                var builder = new EquationBuilder();

                builder
                    .Value(1)
                    .Add()
                    .Value(2)
                    .Add()
                    .Parentheses(b =>
                    {
                        b.Value(2)
                        .Add()
                        .Value(2);
                    });
            }

            {
                var builder = new EquationBuilder();

                builder
                    .Value(1)
                    .Divide()
                    .Parentheses(b =>
                    {
                        b.Value(2)
                        .Add()
                        .Value(3);
                    });
            }

            {
                var builder = new EquationBuilder();

                builder
                    .Value(1)
                    .Divide(b =>
                    {
                        b.Value(2)
                        .Add()
                        .Value(3);
                    });
            }

            {
                var builder = new EquationBuilder();
                var adding = true;

                builder
                    .Value(1)
                    .If(adding,
                        onTrue: b => b.Add(),
                        onFalse: b => b.Divide())
                    .Value(2);
            }

            {
                var builder = new EquationBuilder();
                var needExtraValues = true;

                builder
                    .Value(1)
                    .Add()
                    .If(needExtraValues,
                        onTrue: b => b.Value(3).Add().Value(4).Add())
                    .Value(2);
            }

            {
                var builder = new EquationBuilder();

                builder
                    .Map(Enumerable.Repeat(1, 10), (b, element) =>
                        b.Value(element).Add())
                    .Value(1);
            }

            {
                var builder = new EquationBuilder();

                builder
                    .Map(Enumerable.Range(100, 9),
                        action: (b, element, index) =>
                            b.Value(element)
                            .Divide()
                            .Value(index)
                            .Add())
                    .Value(110)
                    .Divide()
                    .Value(10);
            }

            {
                var builder = new EquationBuilder();

                builder
                    .Reduce(Enumerable.Range(0, 9),
                        seed: 0,
                        action: (previouse, element) => previouse + element,
                        onEnd: (b, final) => b.Value(final));
            }

            {
                var builder = new EquationBuilder();

                builder
                    .Reduce(Enumerable.Range(0, 9),
                        seed: 0,
                        action: (previouse, element, index) => previouse + element * index,
                        onEnd: (b, final) => b.Value(final));
            }
        }