Exemplo n.º 1
0
        public void Test_TwoVariables_Linear_1()
        {
            //2x+3y-1=0
            var x     = new Var("x");
            var term1 = new Term(Expression.Multiply, new List <object>()
            {
                2, x
            });
            var y     = new Var("y");
            var term2 = new Term(Expression.Multiply, new List <object>()
            {
                3, y
            });
            var term = new Term(Expression.Add, new List <object>()
            {
                term1, term2, -1
            });
            var equation = new Equation(term, 0);

            object obj;
            bool?  result = equation.Eval(out obj, false);

            Assert.Null(result);
            var outputEq = obj as Equation;

            Assert.NotNull(outputEq);
            Assert.True(outputEq.Equals(equation));

            result = equation.Eval(out obj, true);
            Assert.Null(result);
            outputEq = obj as Equation;
            Assert.NotNull(outputEq);
            Assert.False(outputEq.Equals(equation));
            Assert.True(outputEq.ToString().Equals("2x+3y=1"));
        }
Exemplo n.º 2
0
        public void Test_Arith_2()
        {
            //1+2=4
            var lhs = new Term(Expression.Add, new List <object>()
            {
                1, 2
            });
            var  equation = new Equation(lhs, 4);
            bool result   = equation.ContainsVar();

            Assert.False(result);
            Assert.True(equation.ToString().Equals("1+2=4"));

            object obj = equation.Eval();

            Assert.NotNull(obj);
            var satisfied = obj as bool?;

            Assert.NotNull(satisfied);
            Assert.False(satisfied.Value);
            Assert.True(equation.CachedEntities.Count == 1);
            var cachedEq = equation.CachedEntities.ToList()[0] as Equation;

            Assert.NotNull(cachedEq);

            Assert.True(cachedEq.ToString().Equals("3=4"));
            Assert.True(cachedEq.Traces.Count == 1);
        }
Exemplo n.º 3
0
        public void Test_Algebra_TwoVariables_Quadratic_1()
        {
            //a^2+b^2=25
            object pt1XCoord = new Var("a");
            object pt2XCoord = new Var('b');

            //var term1 = new Term(Expression.Add, new List<object>() { pt1XCoord, pt2XCoord });
            var term11 = new Term(Expression.Power, new List <object>()
            {
                pt1XCoord, 2.0
            });
            //var term2 = new Term(Expression.Add, new List<object>() { pt1YCoord, pt2YCoord });
            var term22 = new Term(Expression.Power, new List <object>()
            {
                pt2XCoord, 2.0
            });
            var rhs = new Term(Expression.Add, new List <object>()
            {
                term11, term22
            });
            var eq = new Equation(rhs, 25);

            eq.Eval();
            Assert.True(eq.CachedEntities.Count == 1);
            var outputEq = eq.CachedEntities.ToList()[0];

            Assert.True(outputEq.Equals(eq));
        }
Exemplo n.º 4
0
        public static bool IsEqGoal(this Equation eq, out object goal, bool allowEval = true)
        {
            goal = null;

            if (!allowEval)
            {
                if (SatisfyGoalCondition(eq))
                {
                    var lst      = new List <object>();
                    var goalTemp = new EqGoal(eq);
                    lst.Add(goalTemp);
                    return(true);
                }
                return(false);
            }

            eq.Eval();
            if (eq.CachedEntities.Count == 1)
            {
                var outEq = eq.CachedEntities.ToList()[0] as Equation;
                if (outEq != null && SatisfyGoalCondition(outEq))
                {
                    goal = new EqGoal(outEq)
                    {
                        Traces = eq.Traces
                    };
                    return(true);
                }
            }

            if (eq.CachedEntities.Count > 1)
            {
                var lst = new List <object>();
                foreach (var temp in eq.CachedEntities.ToList())
                {
                    var eqTemp = temp as Equation;
                    if (eqTemp != null && SatisfyGoalCondition(eqTemp))
                    {
                        var goalTemp = new EqGoal(eqTemp)
                        {
                            Traces = eqTemp.Traces
                        };
                        lst.Add(goalTemp);
                    }
                }
                if (lst.Count == 0)
                {
                    return(false);
                }
                goal = lst;
                return(true);
            }
            return(false);
        }
Exemplo n.º 5
0
        public void Test_Arith_Frac_1()
        {
            //1/1=1   -> 1=1
            var term1 = new Term(Expression.Divide, new List <object>()
            {
                1, 1
            });
            var    eq = new Equation(term1, 1);
            object obj;
            bool?  flag = eq.Eval(out obj);

            Assert.True(flag);
            Assert.False(obj.Equals(eq));
        }
        public void Test_Algebra_OneVariable_Linear_1()
        {
            //1+2=x
            var x = new Var('x');
            var lhs = new Term(Expression.Add, new List<object>() { 1, 2 });
            var equation = new Equation(lhs, x);
            bool result = equation.ContainsVar();
            Assert.True(result);
            Assert.True(equation.ToString().Equals("1+2=x"));

            equation.Eval();
            Assert.True(equation.CachedEntities.Count == 1);
            var outputEq = equation.CachedEntities.ToList()[0] as Equation;
            Assert.NotNull(outputEq);
            Assert.True(outputEq.ToString().Equals("x=3"));
            Assert.True(outputEq.Traces.Count == 1);
        }
Exemplo n.º 7
0
        public void Test_Algebra_OneVariable_Quadratic_3()
        {
            //25 = (a-3.0)^2+4^2
            object pt1XCoord = new Var("a");
            object pt1YCoord = 6.0;
            object pt2XCoord = -3.0;
            object pt2YCoord = 3.0;

            var term1 = new Term(Expression.Add, new List <object>()
            {
                pt1XCoord, pt2XCoord
            });
            var term11 = new Term(Expression.Power, new List <object>()
            {
                term1, 2.0
            });
            var term2 = new Term(Expression.Add, new List <object>()
            {
                pt1YCoord, pt2YCoord
            });
            var term22 = new Term(Expression.Power, new List <object>()
            {
                4, 2.0
            });
            var rhs = new Term(Expression.Add, new List <object>()
            {
                term11, term22
            });
            var eq = new Equation(25, rhs);

            eq.Eval();
            Assert.True(eq.CachedEntities.Count == 2);

            var outputEq1 = eq.CachedEntities.ToList()[0] as Equation;

            Assert.NotNull(outputEq1);
            Assert.True(outputEq1.ToString().Equals("a=6"));
            Assert.True(outputEq1.Traces.Count == 1);

            var outputEq2 = eq.CachedEntities.ToList()[1] as Equation;

            Assert.NotNull(outputEq2);
            Assert.True(outputEq2.ToString().Equals("a=0"));
            Assert.True(outputEq2.Traces.Count == 1);
        }
Exemplo n.º 8
0
        public void Test_Arith_Frac_2()
        {
            //1/2=1   -> 1=2
            var term1 = new Term(Expression.Divide, new List <object>()
            {
                1, 2
            });
            var    eq = new Equation(term1, 1);
            object obj;
            bool?  flag = eq.Eval(out obj);

            //Assert.True(flag);
            Assert.False(obj.Equals(eq));
            var gEq = obj as Equation;

            Assert.NotNull(gEq);
            Assert.True(gEq.Lhs.ToString().Equals("1"));
            Assert.True(gEq.Rhs.ToString().Equals("2"));
        }
Exemplo n.º 9
0
        public void Test_Arith_Frac_3()
        {
            //2/3=4   -> 2=12
            var term2 = new Term(Expression.Divide, new List <object>()
            {
                2, 3
            });
            var eq = new Equation(term2, 4);

            object obj;
            bool?  flag = eq.Eval(out obj);

            //Assert.True(flag);
            Assert.False(obj.Equals(eq));
            var gEq = obj as Equation;

            Assert.NotNull(gEq);
            Assert.True(gEq.Lhs.ToString().Equals("2"));
            Assert.True(gEq.Rhs.ToString().Equals("12"));
        }
Exemplo n.º 10
0
        public void Test_Arith_Frac_4()
        {
            //(3+1)/4=5 -> 3+1=20
            var term1 = new Term(Expression.Add, new List <object>()
            {
                3, 1
            });
            var term2 = new Term(Expression.Divide, new List <object>()
            {
                term1, 4
            });
            var    eq = new Equation(term2, 5);
            object obj;
            bool?  flag = eq.Eval(out obj);
            var    gEq  = obj as Equation;

            Assert.NotNull(gEq);
            Assert.True(gEq.Lhs.ToString().Equals("4"));
            Assert.True(gEq.Rhs.ToString().Equals("20"));
        }
Exemplo n.º 11
0
        public void Test_Arith_2()
        {
            //1+2=4
            var lhs = new Term(Expression.Add, new List<object>() { 1, 2 });
            var equation = new Equation(lhs, 4);
            bool result = equation.ContainsVar();
            Assert.False(result);
            Assert.True(equation.ToString().Equals("1+2=4"));

            object obj = equation.Eval();
            Assert.NotNull(obj);
            var satisfied = obj as bool?;
            Assert.NotNull(satisfied);
            Assert.False(satisfied.Value);
            Assert.True(equation.CachedEntities.Count == 1);
            var cachedEq = equation.CachedEntities.ToList()[0] as Equation;
            Assert.NotNull(cachedEq);

            Assert.True(cachedEq.ToString().Equals("3=4"));
            Assert.True(cachedEq.Traces.Count == 1);
        }
Exemplo n.º 12
0
        public void Test_Arith_4()
        {
            //1*2*3=7
            var lhs = new Term(Expression.Multiply, new List <object>()
            {
                1, 2, 3
            });
            var  equation = new Equation(lhs, 7);
            bool result   = equation.ContainsVar();

            Assert.False(result);
            //Assert.True(equation.ToString().Equals("2*3=7"));

            object outputEq;
            bool?  evalResult = equation.Eval(out outputEq);

            Assert.NotNull(evalResult);
            Assert.False(evalResult.Value);
            Assert.NotNull(outputEq);
            Assert.True(outputEq.ToString().Equals("6=7"));
            Assert.True(equation.Traces.Count == 1);
        }
Exemplo n.º 13
0
        public void Test_Algebra_OneVariable_Linear_1()
        {
            //1+2=x
            var x   = new Var('x');
            var lhs = new Term(Expression.Add, new List <object>()
            {
                1, 2
            });
            var  equation = new Equation(lhs, x);
            bool result   = equation.ContainsVar();

            Assert.True(result);
            Assert.True(equation.ToString().Equals("1+2=x"));

            equation.Eval();
            Assert.True(equation.CachedEntities.Count == 1);
            var outputEq = equation.CachedEntities.ToList()[0] as Equation;

            Assert.NotNull(outputEq);
            Assert.True(outputEq.ToString().Equals("x=3"));
            Assert.True(outputEq.Traces.Count == 1);
        }
Exemplo n.º 14
0
        public void Test_Arith_3()
        {
            //1+2+3=6
            var lhs = new Term(Expression.Add, new List <object>()
            {
                1, 2, 3
            });
            var  equation = new Equation(lhs, 6);
            bool result   = equation.ContainsVar();

            Assert.False(result);
            Assert.True(equation.ToString().Equals("1+2+3=6"));

            object outputEq;
            bool?  evalResult = equation.Eval(out outputEq);

            Assert.NotNull(evalResult);
            Assert.True(evalResult.Value);
            Assert.NotNull(outputEq);
            Assert.True(outputEq.ToString().Equals("6=6"));
            Assert.True(equation.Traces.Count == 1);
        }
        public void Test_Algebra_TwoVariables_Quadratic_1()
        {
            //a^2+b^2=25
            object pt1XCoord = new Var("a");
            object pt2XCoord = new Var('b');

            //var term1 = new Term(Expression.Add, new List<object>() { pt1XCoord, pt2XCoord });
            var term11 = new Term(Expression.Power, new List<object>() { pt1XCoord, 2.0 });
            //var term2 = new Term(Expression.Add, new List<object>() { pt1YCoord, pt2YCoord });
            var term22 = new Term(Expression.Power, new List<object>() { pt2XCoord, 2.0 });
            var rhs = new Term(Expression.Add, new List<object>() { term11, term22 });
            var eq = new Equation(rhs, 25);

            eq.Eval();
            Assert.True(eq.CachedEntities.Count == 1);
            var outputEq = eq.CachedEntities.ToList()[0];
            Assert.True(outputEq.Equals(eq));

        }
        public void Test_TwoVariables_Linear_1()
        {
            //2x+3y-1=0
            var x = new Var("x");
            var term1 = new Term(Expression.Multiply, new List<object>() { 2, x });
            var y = new Var("y");
            var term2 = new Term(Expression.Multiply, new List<object>() { 3, y });
            var term = new Term(Expression.Add, new List<object>() { term1, term2, -1 });
            var equation = new Equation(term, 0);

            object obj;
            bool? result = equation.Eval(out obj, false);
            Assert.Null(result);
            var outputEq = obj as Equation;
            Assert.NotNull(outputEq);
            Assert.True(outputEq.Equals(equation));

            result = equation.Eval(out obj, true);
            Assert.Null(result);
            outputEq = obj as Equation;
            Assert.NotNull(outputEq);
            Assert.False(outputEq.Equals(equation));
            Assert.True(outputEq.ToString().Equals("2x+3y=1"));
        }
Exemplo n.º 17
0
 public void Test_Arith_Frac_1()
 {
     //1/1=1   -> 1=1
     var term1 = new Term(Expression.Divide, new List<object>() {1, 1});
     var eq = new Equation(term1, 1);
     object obj;
     bool? flag = eq.Eval(out obj);
     Assert.True(flag);
     Assert.False(obj.Equals(eq));
 }
        public void Test_Algebra_OneVariable_Quadratic_3()
        {
            //25 = (a-3.0)^2+4^2
            object pt1XCoord = new Var("a");
            object pt1YCoord = 6.0;
            object pt2XCoord = -3.0;
            object pt2YCoord = 3.0;

            var term1 = new Term(Expression.Add, new List<object>() { pt1XCoord, pt2XCoord });
            var term11 = new Term(Expression.Power, new List<object>() { term1, 2.0 });
            var term2 = new Term(Expression.Add, new List<object>() { pt1YCoord, pt2YCoord });
            var term22 = new Term(Expression.Power, new List<object>() { 4, 2.0 });
            var rhs = new Term(Expression.Add, new List<object>() { term11, term22 });
            var eq = new Equation(25,rhs);

            eq.Eval();
            Assert.True(eq.CachedEntities.Count == 2);

            var outputEq1 = eq.CachedEntities.ToList()[0] as Equation;
            Assert.NotNull(outputEq1);
            Assert.True(outputEq1.ToString().Equals("a=6"));
            Assert.True(outputEq1.Traces.Count == 1);

            var outputEq2 = eq.CachedEntities.ToList()[1] as Equation;
            Assert.NotNull(outputEq2);
            Assert.True(outputEq2.ToString().Equals("a=0"));
            Assert.True(outputEq2.Traces.Count == 1);
        }
Exemplo n.º 19
0
        public override bool UnifyShape(ShapeSymbol ss)
        {
            var ps = ss as PointSymbol;
            if (ps == null) return false;
            var pt = ps.Shape as Point;
            Debug.Assert(pt != null);
            var line = Shape as Line;
            Debug.Assert(line != null);

            Term xTerm = null;
            if (line.A != null)
            {
                xTerm = new Term(Expression.Multiply, new List<object>() {line.A, pt.XCoordinate});
            }
            Term yTerm = null;
            if (line.B != null)
            {
                yTerm = new Term(Expression.Multiply, new List<object>() { line.B, pt.YCoordinate });
            }

            var lst = new List<object>();
            if(xTerm != null) lst.Add(xTerm);
            if(yTerm != null) lst.Add(yTerm);
            if(line.C != null) lst.Add(line.C);

            var lhs = new Term(Expression.Add, lst);
            var eq = new Equation(lhs, 0);

            object obj;
            bool? satisified = eq.Eval(out obj, false);

            if (satisified == null) return false;
            if (satisified.Value) return true;

            return false;
        }
Exemplo n.º 20
0
 public void Test_Arith_Frac_2()
 {
     //1/2=1   -> 1=2
     var term1 = new Term(Expression.Divide, new List<object>() { 1, 2});
     var eq = new Equation(term1, 1);
     object obj;
     bool? flag = eq.Eval(out obj);
     //Assert.True(flag);
     Assert.False(obj.Equals(eq));
     var gEq = obj as Equation;
     Assert.NotNull(gEq);
     Assert.True(gEq.Lhs.ToString().Equals("1"));
     Assert.True(gEq.Rhs.ToString().Equals("2"));
 }
Exemplo n.º 21
0
        public void Test_Arith_Frac_3()
        {
            //2/3=4   -> 2=12
            var term2 = new Term(Expression.Divide, new List<object>() {2, 3});
            var eq = new Equation(term2, 4);

            object obj;
            bool? flag = eq.Eval(out obj);
            //Assert.True(flag);
            Assert.False(obj.Equals(eq));
            var gEq = obj as Equation;
            Assert.NotNull(gEq);
            Assert.True(gEq.Lhs.ToString().Equals("2"));
            Assert.True(gEq.Rhs.ToString().Equals("12"));
        }
Exemplo n.º 22
0
 public void Test_Arith_Frac_4()
 {
     //(3+1)/4=5 -> 3+1=20
     var term1 = new Term(Expression.Add,    new List<object>() {3, 1});
     var term2 = new Term(Expression.Divide, new List<object>() {term1, 4});
     var eq = new Equation(term2, 5);
     object obj;
     bool? flag = eq.Eval(out obj);
     var gEq = obj as Equation;
     Assert.NotNull(gEq);
     Assert.True(gEq.Lhs.ToString().Equals("4"));
     Assert.True(gEq.Rhs.ToString().Equals("20"));
 } 
Exemplo n.º 23
0
        public void Test_Arith_3()
        {
            //1+2+3=6
            var lhs = new Term(Expression.Add, new List<object>() { 1, 2, 3 });
            var equation = new Equation(lhs, 6);
            bool result = equation.ContainsVar();
            Assert.False(result);
            Assert.True(equation.ToString().Equals("1+2+3=6"));

            object outputEq;
            bool? evalResult = equation.Eval(out outputEq);
            Assert.NotNull(evalResult);
            Assert.True(evalResult.Value);
            Assert.NotNull(outputEq);
            Assert.True(outputEq.ToString().Equals("6=6"));
            Assert.True(equation.Traces.Count == 1);
        }
Exemplo n.º 24
0
        public void Test_Arith_4()
        {
            //1*2*3=7
            var lhs = new Term(Expression.Multiply, new List<object>() { 1, 2, 3 });
            var equation = new Equation(lhs, 7);
            bool result = equation.ContainsVar();
            Assert.False(result);
            //Assert.True(equation.ToString().Equals("2*3=7"));

            object outputEq;
            bool? evalResult = equation.Eval(out outputEq);
            Assert.NotNull(evalResult);
            Assert.False(evalResult.Value);
            Assert.NotNull(outputEq);
            Assert.True(outputEq.ToString().Equals("6=7"));
            Assert.True(equation.Traces.Count == 1);
        }