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")); }
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); }
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 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); }
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); }
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); }
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")); }
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")); }
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")); }
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); }
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); }
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); }
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")); }
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); }
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; }
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")); }
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")); }
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")); }
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_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); }