コード例 #1
0
        public void Test_Distributive_9()
        {
            //x^2+x^2+x^2     -> (1+1+1)*x^2
            var x  = new Var('x');
            var t1 = new Term(Expression.Power, new List <object>()
            {
                x, 2
            });

            var x2 = new Var('x');
            var t2 = new Term(Expression.Power, new List <object>()
            {
                x2, 2
            });

            var x3 = new Var('x');
            var t3 = new Term(Expression.Power, new List <object>()
            {
                x3, 2
            });

            var t4 = new Term(Expression.Add, new List <object>()
            {
                t1, t2, t3
            });

            object obj = t4.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("3(x^2)"));
        }
コード例 #2
0
        public void Test_Distributive_10()
        {
            //2*x^2+x^2+y     -> (2+1)x^2+y
            var x     = new Var('x');
            var xTerm = new Term(Expression.Power, new List <object>()
            {
                x, 2
            });
            var t1 = new Term(Expression.Multiply, new List <object>()
            {
                2, xTerm
            });

            var x2 = new Var('x');
            var t2 = new Term(Expression.Power, new List <object>()
            {
                x2, 2
            });

            var t3 = new Var('y');

            var t4 = new Term(Expression.Add, new List <object>()
            {
                t1, t2, t3
            });
            object obj = t4.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("3(x^2)+y"));
        }
コード例 #3
0
        public void Test_Distributive_0()
        {
            //(1+1)*y
            var term = new Term(Expression.Add, new List <object>()
            {
                1, 1
            });
            var y     = new Var('y');
            var term1 = new Term(Expression.Multiply, new List <object>()
            {
                term, y
            });
            object obj = term1.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("2y"));
            Assert.True(term1.Traces.Count == 1);

            //(1+1+1)*y -> (2+1)*y
            term = new Term(Expression.Add, new List <object>()
            {
                1, 1, 1
            });
            term1 = new Term(Expression.Multiply, new List <object>()
            {
                term, y
            });
            obj = term1.Eval();
            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("3y"));
            Assert.True(term1.Traces.Count == 1);
        }
コード例 #4
0
        public void Term_Algebra_Arith_2()
        {
            var x = new Var('x');
            // 2*5 + x
            var lst = new List <object>()
            {
                2, 5
            };
            var term = new Term(Expression.Multiply, lst);
            var lst1 = new List <object>()
            {
                term, x
            };
            var    term1 = new Term(Expression.Add, lst1);
            object obj   = term1.Eval();

            Assert.NotNull(obj);
            var gTerm = obj as Term;

            Assert.NotNull(gTerm);
            var glst = gTerm.Args as List <object>;

            Assert.NotNull(glst);
            Assert.True(glst.Count == 2);
            Assert.True(term1.Traces.Count == 1);
        }
コード例 #5
0
        public void Test_Line_Match_1()
        {
            //3y-(2x-9)
            var y     = new Var('y');
            var term1 = new Term(Expression.Multiply, new List <object>()
            {
                3, y
            });
            var x     = new Var('x');
            var term2 = new Term(Expression.Multiply, new List <object>()
            {
                2, x
            });
            var term3 = new Term(Expression.Add, new List <object>()
            {
                term2, -9
            });
            var term4 = new Term(Expression.Multiply, new List <object>()
            {
                -1, term3
            });
            var term5 = new Term(Expression.Add, new List <object>()
            {
                term1, term4
            });

            object obj = term4.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("-2x+9"));

            obj = term5.Eval();
            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("-2x+3y+9"));
        }
コード例 #6
0
        public void Term_Algebra_Arith_4()
        {
            // //a^2+ 4^2 - 25;
            //a^2+25+-1*16
            var a     = new Var('a');
            var term1 = new Term(Expression.Power, new List <object>()
            {
                a, 2
            });
            var term2 = new Term(Expression.Power, new List <object>()
            {
                4, 2
            });
            var term3 = new Term(Expression.Multiply, new List <object>()
            {
                -1, 25
            });
            var term = new Term(Expression.Add, new List <object>()
            {
                term1, term2, term3
            });
            object obj = term.Eval();

            Assert.NotNull(obj);
        }
コード例 #7
0
 public void Term_Arith_3()
 {
     //Substraction
     var lst = new List<object>() { 1, -2, -3 };
     var term = new Term(Expression.Multiply, lst);
     object obj = term.Eval();
     Assert.NotNull(obj);
     Assert.True(obj.Equals(6));
     Assert.True(term.Traces.Count == 1);
 }
コード例 #8
0
 public void Term_Arith_2()
 {
     //1+(-2)+(-3)
     //Substraction
     var lst = new List<object>() { 1, -2, -3 };
     var term = new Term(Expression.Add, lst);
     object obj = term.Eval();
     Assert.NotNull(obj);
     Assert.True(obj.Equals(-4));
     Assert.True(term.Traces.Count == 1);
 }
コード例 #9
0
 public void Term_Arith_1()
 {
     //1+2+3
     //Addition
     var lst = new List<object>() {1, 2, 3};
     var term = new Term(Expression.Add, lst);
     object obj = term.Eval();
     Assert.NotNull(obj);
     Assert.True(obj.Equals(6));
     Assert.True(term.Traces.Count == 1);
 }
コード例 #10
0
        public void Term_Arith_6()
        {
            //3/2
            var term = new Term(Expression.Divide, new List <object>()
            {
                3, 2
            });
            object obj = term.Eval();

            Assert.True(obj.Equals(1.5));
        }
コード例 #11
0
        public void Term_Arith_7()
        {
            //3^2
            var term = new Term(Expression.Power, new List <object>()
            {
                3, 2
            });
            object obj = term.Eval();

            Assert.True(obj.Equals(9));
        }
コード例 #12
0
        public void Term_Arith_8()
        {
            //9^0.5, not 9^(1/2)
            var term = new Term(Expression.Power, new List <object>()
            {
                9, 0.5
            });
            object obj = term.Eval();

            Assert.True(obj.Equals(3));
        }
コード例 #13
0
        public void Term_Arith_9()
        {
            //(-1)*0
            var term = new Term(Expression.Multiply, new List <object>()
            {
                -1, 0
            });
            object obj = term.Eval();

            Assert.True(obj.Equals(0));
        }
コード例 #14
0
 public void Term_Arith_5()
 {
     //1-2*3
     var lst = new List<object>() { 2, 3 };
     var term = new Term(Expression.Multiply, lst);
     var lst1 = new List<object>() { 1, term };
     var term1 = new Term(Expression.Subtract, lst1);
     object obj = term1.Eval();
     Assert.NotNull(obj);
     Assert.True(obj.Equals(-5));
     Assert.True(term1.Traces.Count == 1);
 }
コード例 #15
0
        public void Term_Arith_3()
        {
            //Substraction
            var lst = new List <object>()
            {
                1, -2, -3
            };
            var    term = new Term(Expression.Multiply, lst);
            object obj  = term.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.Equals(6));
            Assert.True(term.Traces.Count == 1);
        }
コード例 #16
0
        public void Test_Distributive_01()
        {
            //3*3*y
            var y    = new Var('y');
            var term = new Term(Expression.Multiply, new List <object>()
            {
                3, 3, y
            });
            object obj = term.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("9y"));
            Assert.True(term.Traces.Count == 1);
        }
コード例 #17
0
 public void Term_Algebra_Arith_3()
 {
     // 3 + x + 3
     var x = new Var('x');
     var lst = new List<object>() { 3, x, 3 };
     var term = new Term(Expression.Add, lst);
     object obj = term.Eval();
     Assert.NotNull(obj);
     var gTerm = obj as Term;
     Assert.NotNull(gTerm);
     var glst = gTerm.Args as List<object>;
     Assert.NotNull(glst);
     Assert.True(glst.Count == 2);
     Assert.True(term.Traces.Count == 1);
 }
コード例 #18
0
        public void Test_Zero_2()
        {
            //0*x=>0
            var x    = new Var('x');
            var term = new Term(Expression.Multiply, new List <object>()
            {
                0, x
            });
            //Assert.True(term.ToString().Equals("0x"));
            var result = term.Eval();

            Assert.NotNull(result);
            Assert.True(result.Equals(0));
            Assert.True(term.Traces.Count == 1);
        }
コード例 #19
0
        public void Term_Arith_2()
        {
            //1+(-2)+(-3)
            //Substraction
            var lst = new List <object>()
            {
                1, -2, -3
            };
            var    term = new Term(Expression.Add, lst);
            object obj  = term.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.Equals(-4));
            Assert.True(term.Traces.Count == 1);
        }
コード例 #20
0
        public void Test_Distributive_1()
        {
            //y+y=> 1*y+1*y=> (1+1)*y => 2*y
            var y    = new Var('y');
            var term = new Term(Expression.Add, new List <object>()
            {
                y, y
            });
            //Assert.True(term.ToString().Equals("(y+y)"));
            object obj = term.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("2y"));
            Assert.True(term.Traces.Count == 1);
        }
コード例 #21
0
        public void Term_Arith_1()
        {
            //1+2+3
            //Addition
            var lst = new List <object>()
            {
                1, 2, 3
            };
            var    term = new Term(Expression.Add, lst);
            object obj  = term.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.Equals(6));
            Assert.True(term.Traces.Count == 1);
        }
コード例 #22
0
        public void Test_Zero_1()
        {
            //x+0=>x
            var x    = new Var('x');
            var term = new Term(Expression.Add, new List <object>()
            {
                x, 0
            });

            Assert.True(term.ToString().Equals("x+0"));
            var result = term.Eval();

            Assert.True(result.ToString().Equals("x"));
            Assert.NotNull(result);
            Assert.True(term.Traces.Count == 1);
        }
コード例 #23
0
        /// <summary>
        /// a+1=, 2+3+5=
        /// </summary>
        /// <param name="term"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public bool ConstraintSatisfy(Term term, out object obj)
        {
            var evalObj = term.Eval();
            var generatedEq = new Equation(term, evalObj);
            generatedEq.ImportTrace(term);

            var evalTerm = evalObj as Term;
            var evalVar = evalObj as Var;

            var dict = new Dictionary<object, object>();
            var connectLst = new List<GraphNode>();
            if (evalTerm != null)
            {
                for (var i = 0; i < _nodes.Count; i++)
                {
                    var goalNode = _nodes[i] as GoalNode;
                    if (goalNode != null)
                    {
                        if (evalTerm.ContainsVar((EqGoal)goalNode.Goal))
                        {
                            connectLst.Add(goalNode);
                        }
                    }
                }
            }
            if (evalVar != null)
            {
                for (var i = 0; i < _nodes.Count; i++)
                {
                    var goalNode = _nodes[i] as GoalNode;
                    if (goalNode != null)
                    {
                        var eqGoal = goalNode.Goal as EqGoal;
                        Debug.Assert(eqGoal != null);
                        var lhsVar = eqGoal.Lhs as Var;
                        Debug.Assert(lhsVar != null);
                        if (lhsVar.Equals(evalVar))
                        {
                            connectLst.Add(goalNode);
                        }
                    }
                }
            }
            dict.Add(connectLst, generatedEq);
            obj = dict;
            return true;
        }
コード例 #24
0
        public void Test_Distributive_5()
        {
            //3*(x+1) -> 3x + 3
            var x    = new Var('x');
            var term = new Term(Expression.Add, new List <object>()
            {
                x, 1
            });
            var term1 = new Term(Expression.Multiply, new List <object> {
                3, term
            });
            object obj = term1.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("3x+3"));
            Assert.True(term1.Traces.Count == 1);
        }
コード例 #25
0
 public void Term_Algebra_Arith_2()
 {
     var x = new Var('x');
     // 2*5 + x
     var lst = new List<object>() { 2, 5 };
     var term = new Term(Expression.Multiply, lst);
     var lst1 = new List<object>() { term, x };
     var term1 = new Term(Expression.Add, lst1);
     object obj = term1.Eval();
     Assert.NotNull(obj);
     var gTerm = obj as Term;
     Assert.NotNull(gTerm);
     var glst = gTerm.Args as List<object>;
     Assert.NotNull(glst);
     Assert.True(glst.Count == 2);
     Assert.True(term1.Traces.Count == 1);
 }
コード例 #26
0
        public void Test_Associative_1()
        {
            //(3*(2*x)) => (3*2)*x
            var x    = new Var('x');
            var term = new Term(Expression.Multiply, new List <object>()
            {
                2, x
            });
            var term1 = new Term(Expression.Multiply, new List <object>()
            {
                3, term
            });
            object obj = term1.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("6x"));
            Assert.True(term1.Traces.Count == 1);
        }
コード例 #27
0
        public void Test_Distributive_2()
        {
            // y+2*y  -> (1+2)*y
            var y     = new Var('y');
            var term1 = new Term(Expression.Multiply, new List <object>()
            {
                2, y
            });
            var term = new Term(Expression.Add, new List <object>()
            {
                y, term1
            });
            object obj = term.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("3y"));
            Assert.True(term.Traces.Count == 1);
        }
コード例 #28
0
        public void Test_Associative_4()
        {
            //(2/3)x -> (2*x)/3
            var x    = new Var('x');
            var term = new Term(Expression.Divide, new List <object>()
            {
                2, 3
            });
            var term1 = new Term(Expression.Multiply, new List <object>()
            {
                term, x
            });

            object obj = term1.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("(2x)/3"));
        }
コード例 #29
0
        public void Test_Distributive_11()
        {
            //x/3+9 -> (x+27)/3
            var x     = new Var('x');
            var term1 = new Term(Expression.Divide, new List <object>()
            {
                x, 3
            });
            var term2 = new Term(Expression.Add, new List <object>()
            {
                term1, 9
            });

            object obj = term2.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("(x+27)/3"));
        }
コード例 #30
0
        public void Test_Associative_2()
        {
            //(a+1)+1 -> a+(1+1)
            var a    = new Var('a');
            var term = new Term(Expression.Add, new List <object>()
            {
                a, 1
            });
            var term1 = new Term(Expression.Add, new List <object>()
            {
                term, 1
            });
            object obj = term1.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("a+2"));
            Assert.True(term1.Traces.Count == 1);
        }
コード例 #31
0
        public void Term_Arith_5()
        {
            //1-2*3
            var lst = new List <object>()
            {
                2, 3
            };
            var term = new Term(Expression.Multiply, lst);
            var lst1 = new List <object>()
            {
                1, term
            };
            var    term1 = new Term(Expression.Subtract, lst1);
            object obj   = term1.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.Equals(-5));
            Assert.True(term1.Traces.Count == 1);
        }
コード例 #32
0
        public void Test_Simple_1()
        {
            var variable = new Var('x');
            var term1    = new Term(Expression.Multiply, new List <object>()
            {
                2, variable
            });
            var term2 = new Term(Expression.Multiply, new List <object>()
            {
                -1, variable
            });
            //2x-x -> x
            var term = new Term(Expression.Add, new List <object>()
            {
                term1, term2
            });
            var obj = term.Eval();

            Assert.True(obj.Equals(variable));
        }
コード例 #33
0
        public void Test_Distributive_4()
        {
            //a*y+y+x           -> (a+1)*y+x
            var x     = new Var('x');
            var y     = new Var('y');
            var a     = new Var('a');
            var term1 = new Term(Expression.Multiply, new List <object>()
            {
                a, y
            });
            var term = new Term(Expression.Add, new List <object>()
            {
                term1, y, x
            });
            object obj = term.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("x+(a+1)y"));
            Assert.True(term.Traces.Count == 1);
        }
コード例 #34
0
        public void Term_Algebra_Arith_3()
        {
            // 3 + x + 3
            var x   = new Var('x');
            var lst = new List <object>()
            {
                3, x, 3
            };
            var    term = new Term(Expression.Add, lst);
            object obj  = term.Eval();

            Assert.NotNull(obj);
            var gTerm = obj as Term;

            Assert.NotNull(gTerm);
            var glst = gTerm.Args as List <object>;

            Assert.NotNull(glst);
            Assert.True(glst.Count == 2);
            Assert.True(term.Traces.Count == 1);
        }
コード例 #35
0
        public void Term_Algebra_Arith_5()
        {
            var a     = new Var('a');
            var b     = new Var('b');
            var term1 = new Term(Expression.Power, new List <object>()
            {
                a, 2
            });
            var term2 = new Term(Expression.Power, new List <object>()
            {
                b, 2
            });
            var term = new Term(Expression.Add, new List <object>()
            {
                term1, term2
            });
            object obj = term.Eval();

            Assert.NotNull(obj);
            Assert.True(obj.Equals(term));
        }
コード例 #36
0
        public void Test_LinePatternMatch2()
        {
            //4*x+y+-1*4
            var x     = new Var('x');
            var y     = new Var('y');
            var term1 = new Term(Expression.Multiply, new List <object>()
            {
                4, x
            });
            var term3 = new Term(Expression.Multiply, new List <object>()
            {
                -1, 4
            });
            var term = new Term(Expression.Add, new List <object>()
            {
                term1, y, term3
            });
            object obj = term.Eval();

            Assert.NotNull(obj);
            var gTerm = obj as Term;
        }
コード例 #37
0
        public void Test_Associative_3()
        {
            //(1/3)x -> (1*x)/3
            var x    = new Var('x');
            var term = new Term(Expression.Divide, new List <object>()
            {
                1, 3
            });
            var term1 = new Term(Expression.Multiply, new List <object>()
            {
                term, x
            });

            object obj = term1.Eval();

            Assert.NotNull(obj);
            var gTerm = obj as Term;

            Assert.NotNull(gTerm);
            Assert.True(gTerm.Op.Method.Name.Equals("Divide"));
            Assert.True(obj.ToString().Equals("x/3"));
        }
コード例 #38
0
        public void Test_Distributive_9()
        {
            //x^2+x^2+x^2     -> (1+1+1)*x^2
            var x = new Var('x');
            var t1 = new Term(Expression.Power, new List<object>() { x, 2 });

            var x2 = new Var('x');
            var t2 = new Term(Expression.Power, new List<object>() { x2, 2 });

            var x3 = new Var('x');
            var t3 = new Term(Expression.Power, new List<object>() { x3, 2});

            var t4 = new Term(Expression.Add, new List<object>() { t1, t2, t3});

            object obj = t4.Eval();
            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("3(x^2)"));
        }
コード例 #39
0
        public void Test_Associative_3()
        {
            //(1/3)x -> (1*x)/3
            var x = new Var('x');
            var term = new Term(Expression.Divide, new List<object>() {1, 3});
            var term1 = new Term(Expression.Multiply, new List<object>() {term, x});

            object obj = term1.Eval();
            Assert.NotNull(obj);
            var gTerm = obj as Term;
            Assert.NotNull(gTerm);
            Assert.True(gTerm.Op.Method.Name.Equals("Divide"));
            Assert.True(obj.ToString().Equals("x/3"));
        }
コード例 #40
0
 public void Test_LinePatternMatch2()
 {
     //4*x+y+-1*4
     var x = new Var('x');
     var y = new Var('y');
     var term1 = new Term(Expression.Multiply, new List<object>() { 4, x });
     var term3 = new Term(Expression.Multiply, new List<object>() { -1, 4});
     var term = new Term(Expression.Add, new List<object>() { term1, y, term3});
     object obj = term.Eval();
     Assert.NotNull(obj);
     var gTerm = obj as Term;
 }
コード例 #41
0
 public void Test_Simple_1()
 {
     var variable = new Var('x');
     var term1 = new Term(Expression.Multiply, new List<object>() { 2, variable });
     var term2 = new Term(Expression.Multiply, new List<object>() { -1, variable});
     //2x-x -> x
     var term = new Term(Expression.Add, new List<object>() { term1, term2 });
     var obj = term.Eval();
     Assert.True(obj.Equals(variable));
 }
コード例 #42
0
 public void Test_Distributive_3()
 {
     // y+2*y-4*y  -> -1*y
     var y = new Var('y');
     var term1 = new Term(Expression.Multiply, new List<object>() { 2, y });
     var term2 = new Term(Expression.Multiply, new List<object>() { -4, y });
     var term = new Term(Expression.Add, new List<object>() {y, term1, term2});
     object obj = term.Eval();
     Assert.NotNull(obj);
     Assert.True(obj.ToString().Equals("-y"));
     Assert.True(term.Traces.Count == 1);
 }
コード例 #43
0
        public void Test_Distributive_0()
        {
            //(1+1)*y
            var term  = new Term(Expression.Add, new List<object>() { 1, 1 });
            var y = new Var('y');
            var term1 = new Term(Expression.Multiply, new List<object>() { term, y });
            object obj = term1.Eval();
            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("2y"));
            Assert.True(term1.Traces.Count == 1);

            //(1+1+1)*y -> (2+1)*y
            term = new Term(Expression.Add, new List<object>() { 1, 1 ,1});
            term1 = new Term(Expression.Multiply, new List<object>() { term, y });
            obj = term1.Eval();
            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("3y"));
            Assert.True(term1.Traces.Count == 1);
        }
コード例 #44
0
 public void Test_Distributive_5()
 {
     //3*(x+1) -> 3x + 3
     var x = new Var('x');
     var term = new Term(Expression.Add, new List<object>() { x, 1 });
     var term1 = new Term(Expression.Multiply, new List<object> { 3, term });
     object obj = term1.Eval();
     Assert.NotNull(obj);
     Assert.True(obj.ToString().Equals("3x+3"));
     Assert.True(term1.Traces.Count == 1);
 }
コード例 #45
0
ファイル: Line.cs プロジェクト: buptkang/Relation.Logic
        private void Calc_General_SlopeIntercept()
        {
            if (B == null)
            {
                //ax+c=0
                //y=mx+b
                Slope = double.NaN;
                Intercept = double.NaN;
                return;
            }
            if (A == null)
            {
                //by+c=0
                Slope = 0.0d;
                var term31 = new Term(Expression.Multiply, new List<object>() { -1, C });
                var term41 = new Term(Expression.Divide, new List<object>() { term31, B });
                Intercept = term41.Eval();
                return;
            }

            Debug.Assert(A != null);
            Debug.Assert(B != null);

            var term1 = new Term(Expression.Multiply, new List<object>() { -1, A });
            var term2 = new Term(Expression.Divide, new List<object>() { term1, B });
            var term3 = new Term(Expression.Multiply, new List<object>() { -1, C });
            var term4 = new Term(Expression.Divide, new List<object>() { term3, B });
            Slope = term2.Eval();
            Intercept = term4.Eval();
        }
コード例 #46
0
        public void Test_LinePatterMatch()
        {
            //(2*y)+(2*x)+(-1*y)+(2*x)+4
            var x = new Var('x');
            var y = new Var('y');

            var term1 = new Term(Expression.Multiply, new List<object>() { 2, y });
            var term2 = new Term(Expression.Multiply, new List<object>() { 2, x });
            var term3 = new Term(Expression.Multiply, new List<object>() { -1, y });
            var term4 = new Term(Expression.Multiply, new List<object>() { 2, x });
            var term = new Term(Expression.Add, new List<object>() { term1, term2, term3, term4, 4});
            object obj = term.Eval();
            Assert.NotNull(obj);
            var gTerm = obj as Term;
            Assert.NotNull(gTerm);
            var lst = gTerm.Args as List<object>;
            Assert.NotNull(lst);
            Assert.True(lst.Count == 3);
        }
コード例 #47
0
        public void Test_Associative_5()
        {
//            //(x+1)+(y+1) -> x+y+2
            var x = new Var('x');
            var y = new Var('y');

            var term1 = new Term(Expression.Add, new List<object>() {x, 1});
            var term2 = new Term(Expression.Add, new List<object>() {y, 1});
            var term = new Term(Expression.Add, new List<object>() {term1, term2});

            object obj = term.Eval();
            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("x+y+2"));
        }
コード例 #48
0
        public void Test_Associative_4()
        {
            //(2/3)x -> (2*x)/3
            var x = new Var('x');
            var term = new Term(Expression.Divide, new List<object>() { 2, 3 });
            var term1 = new Term(Expression.Multiply, new List<object>() { term, x });

            object obj = term1.Eval();
            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("(2x)/3"));
        }
コード例 #49
0
        public void Test_Distributive_8()
        {
            //1*y^2+2*y^2     -> (1+2)*y^2
            var y = new Var('y');
            var yTerm = new Term(Expression.Power, new List<object>() { y, 2 });
            var t1 = new Term(Expression.Multiply, new List<object>() { 1, yTerm });
            Assert.True(t1.QuadraticTerm());

            var y2 = new Var('y');
            var yTerm2 = new Term(Expression.Power, new List<object>() { y2, 2 });
            var t2 = new Term(Expression.Multiply, new List<object>() { 2, yTerm2 });
            Assert.True(t2.QuadraticTerm());

            var t3 = new Term(Expression.Add, new List<object>() { t1, t2 });
            Assert.True(t3.QuadraticTerm());

            object obj = t3.Eval();
            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("3(y^2)"));
        }
コード例 #50
0
 public void Test_Associative_2()
 {
     //(a+1)+1 -> a+(1+1)
     var a = new Var('a');
     var term = new Term(Expression.Add, new List<object>() { a, 1 });
     var term1 = new Term(Expression.Add, new List<object>() { term, 1 });
     object obj = term1.Eval();
     Assert.NotNull(obj);
     Assert.True(obj.ToString().Equals("a+2"));
     Assert.True(term1.Traces.Count == 1);
 }
コード例 #51
0
        public void Test_Distributive_7()
        {
            //quadratic:
            //3x^2+x^2 -> (3+1)x^2 -> 4x^2
            var x      = new Var('x');
            var xTerm = new Term(Expression.Power, new List<object>() {x,2});
            var t1 = new Term(Expression.Multiply, new List<object>() {3, xTerm});            
            Assert.True(t1.QuadraticTerm());

            var x2 = new Var('x');
            var t2 = new Term(Expression.Power, new List<object>() {x2, 2});
            Assert.True(t2.QuadraticTerm());

            var t3 = new Term(Expression.Add, new List<object>() {t1, t2});
            Assert.True(t3.QuadraticTerm());

            object obj = t3.Eval();
            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("4(x^2)"));
        }
コード例 #52
0
 public void Test_Associative_1()
 {
     //(3*(2*x)) => (3*2)*x
     var x = new Var('x');
     var term  = new Term(Expression.Multiply, new List<object>() {2, x});
     var term1 = new Term(Expression.Multiply, new List<object>() {3, term});
     object obj = term1.Eval();
     Assert.NotNull(obj);
     Assert.True(obj.ToString().Equals("6x"));
     Assert.True(term1.Traces.Count == 1);
 }
コード例 #53
0
 public void Test_Distributive_4()
 {
     //a*y+y+x           -> (a+1)*y+x
     var x = new Var('x');
     var y = new Var('y');
     var a = new Var('a');
     var term1 = new Term(Expression.Multiply, new List<object>() { a, y });
     var term = new Term(Expression.Add, new List<object>() {term1, y, x});
     object obj = term.Eval();
     Assert.NotNull(obj);
     Assert.True(obj.ToString().Equals("x+(a+1)y"));
     Assert.True(term.Traces.Count == 1);
 }
コード例 #54
0
        public void Test_Distributive_12()
        {
            //(2/3)x+2 -> (2*x+6)/3
            var x = new Var('x');
            var term1 = new Term(Expression.Divide, new List<object>() {2, 3});
            var term2 = new Term(Expression.Multiply, new List<object>() {term1, x});
            var term3 = new Term(Expression.Add, new List<object>(){term2, 2});

            object obj = term3.Eval();
            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("(2x+6)/3"));
        }
コード例 #55
0
 public void Test_Distributive_1()
 {
     //y+y=> 1*y+1*y=> (1+1)*y => 2*y
     var y = new Var('y');
     var term = new Term(Expression.Add, new List<object>(){y, y});
     //Assert.True(term.ToString().Equals("(y+y)"));
     object obj = term.Eval();
     Assert.NotNull(obj);
     Assert.True(obj.ToString().Equals("2y"));
     Assert.True(term.Traces.Count == 1);
 }
コード例 #56
0
        public void Test_Distributive_11()
        {
            //x/3+9 -> (x+27)/3
            var x = new Var('x');
            var term1 = new Term(Expression.Divide, new List<object>() { x, 3 });
            var term2 = new Term(Expression.Add, new List<object>() { term1, 9 });

            object obj = term2.Eval();
            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("(x+27)/3"));
        }
コード例 #57
0
 public void Test_Distributive_01()
 {
     //3*3*y
     var y = new Var('y');
     var term = new Term(Expression.Multiply, new List<object>() { 3, 3, y });
     object obj = term.Eval();
     Assert.NotNull(obj);
     Assert.True(obj.ToString().Equals("9y"));
     Assert.True(term.Traces.Count == 1);
 }
コード例 #58
0
        public void Test_Distributive_10()
        {
            //2*x^2+x^2+y     -> (2+1)x^2+y
            var x = new Var('x');
            var xTerm = new Term(Expression.Power, new List<object>() { x, 2 });
            var t1 = new Term(Expression.Multiply, new List<object>() {2, xTerm});

            var x2 = new Var('x');
            var t2 = new Term(Expression.Power, new List<object>() { x2, 2 });

            var t3 = new Var('y');

            var t4 = new Term(Expression.Add, new List<object>() { t1, t2, t3 });
            object obj = t4.Eval();
            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("3(x^2)+y"));
        }
コード例 #59
0
        public void Test_Line_Match_0()
        {
            //3y+2x-9
            var y = new Var('y');
            var term1 = new Term(Expression.Multiply, new List<object>() { 3, y });
            var x = new Var('x');
            var term2 = new Term(Expression.Multiply, new List<object>() { 2, x });           
            var term3 = new Term(Expression.Add, new List<object>() { term1, term2,-9 });

            var obj = term3.Eval();
            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("2x+3y-9"));
        }
コード例 #60
0
        public void Test_Line_Match_1()
        {
            //3y-(2x-9)
            var y = new Var('y');
            var term1 = new Term(Expression.Multiply, new List<object>() {3, y});
            var x = new Var('x');
            var term2 = new Term(Expression.Multiply, new List<object>() {2, x});
            var term3 = new Term(Expression.Add, new List<object>() {term2, -9});
            var term4 = new Term(Expression.Multiply, new List<object>() {-1, term3});
            var term5 = new Term(Expression.Add, new List<object>() {term1, term4});

            object obj = term4.Eval();
            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("-2x+9"));

            obj = term5.Eval();
            Assert.NotNull(obj);
            Assert.True(obj.ToString().Equals("-2x+3y+9"));
        }