public void TestLineSegment_Unify_Reify_0() { /* * Input sequence: * 1: (AB) [LineSegment] => LineSegment * 2: A(2,3) => Point * 3: B(2,3) => Point * Update: AB [Label] => LineSegment */ var graph = new RelationGraph(); var ptA = new Point("A", 2, 3); var ptASym = new PointSymbol(ptA); graph.AddNode(ptASym); //api call Assert.True(graph.Nodes.Count == 1); var query = new Query(ShapeType.LineSegment); var queryNode = graph.AddNode(query) as QueryNode; Assert.Null(queryNode); var ptB = new Point("B", 3, 4); var PtBSym = new PointSymbol(ptB); graph.AddNode(PtBSym); //api call Assert.True(graph.Nodes.Count == 3); queryNode = graph.RetrieveQueryNode(query); Assert.NotNull(queryNode); }
public void TestLine_Unify_Reify_0() { var graph = new RelationGraph(); var a = new Var("a"); var line = new Line(a, 1, 1.0); var ls = new LineSymbol(line); graph.AddNode(ls); List<ShapeSymbol> lines = graph.RetrieveShapeSymbols(ShapeType.Line); Assert.True(lines.Count == 1); var lineSymbol = lines[0] as LineSymbol; Assert.NotNull(lineSymbol); Assert.True(lineSymbol.CachedSymbols.Count == 0); var eqGoal = new EqGoal(a, 1); // a=1 graph.AddNode(eqGoal); lines = graph.RetrieveShapeSymbols(ShapeType.Line); Assert.True(lines.Count == 1); var currLine = lines[0] as LineSymbol; Assert.NotNull(currLine); Assert.True(currLine.CachedSymbols.Count == 1); var cachedLineSymbol = currLine.CachedSymbols.ToList()[0] as LineSymbol; Assert.NotNull(cachedLineSymbol); var cachedLine = cachedLineSymbol.Shape as Line; Assert.NotNull(cachedLine); Assert.True(cachedLine.A.Equals(1.0)); Assert.True(cachedLine.B.Equals(1.0)); Assert.True(cachedLine.C.Equals(1.0)); graph.DeleteNode(eqGoal); lines = graph.RetrieveShapeSymbols(ShapeType.Line); Assert.True(lines.Count == 1); currLine = lines[0] as LineSymbol; Assert.NotNull(currLine); Assert.True(currLine.CachedSymbols.Count == 0); Assert.True(currLine.CachedGoals.Count == 0); var eqGoal2 = new EqGoal(a, 3); graph.AddNode(eqGoal2); lines = graph.RetrieveShapeSymbols(ShapeType.Line); Assert.True(lines.Count == 1); currLine = lines[0] as LineSymbol; Assert.NotNull(currLine); Assert.True(currLine.CachedSymbols.Count == 1); Assert.True(currLine.CachedGoals.Count == 1); graph.DeleteNode(eqGoal2); lines = graph.RetrieveShapeSymbols(ShapeType.Line); Assert.True(lines.Count == 1); currLine = lines[0] as LineSymbol; Assert.NotNull(currLine); Assert.True(currLine.CachedSymbols.Count == 0); Assert.True(currLine.CachedGoals.Count == 0); }
public void TestScenario2_Relation_1() { /* * 1: A(2,3) [Point] => Point * 2: B(3,4) [Point] => Point * 3: AB [Label] => [Line, LineSegment] * 4: ask slope = ? */ var graph = new RelationGraph(); var ptA = new Point("A", 2, 3); var ptASymbol = new PointSymbol(ptA); var ptB = new Point("B", 3, 4); var ptBSymbol = new PointSymbol(ptB); graph.AddNode(ptASymbol); graph.AddNode(ptBSymbol); const string label = "AB"; var query = new Query(label, ShapeType.Line); var qn = graph.AddNode(query) as QueryNode; Assert.NotNull(qn); Assert.NotNull(qn.Query); Assert.True(qn.Query.Equals(query)); Assert.True(query.Success); Assert.Null(query.FeedBack); Assert.True(qn.InternalNodes.Count == 1); var sn = qn.InternalNodes[0] as ShapeNode; Assert.NotNull(sn); var ls = sn.ShapeSymbol as LineSymbol; Assert.NotNull(ls); Assert.True(ls.ToString().Equals("x-y+1=0")); var shapes = graph.RetrieveShapeNodes(); Assert.True(shapes.Count == 3); var variable = new Var('m'); var query1 = new Query(variable); //m= qn = graph.AddNode(query1) as QueryNode; Assert.NotNull(qn); Assert.NotNull(qn.Query); Assert.True(query.Success); Assert.Null(query.FeedBack); Assert.True(qn.InternalNodes.Count == 1); var gn = qn.InternalNodes[0] as GoalNode; Assert.NotNull(gn); var eqGoal = gn.Goal as EqGoal; Assert.NotNull(eqGoal); Assert.True(eqGoal.Lhs.Equals(variable)); Assert.True(eqGoal.Rhs.Equals(1)); shapes = graph.RetrieveShapeNodes(); Assert.True(shapes.Count == 3); }
public void TestLine_Unify_Reify_1() { var graph = new RelationGraph(); var a = new Var('a'); var point = new Point(2, a); var ps = new PointSymbol(point); graph.AddNode(ps); var line = new Line(1, a, 1.0); var ls = new LineSymbol(line); graph.AddNode(ls); List <ShapeSymbol> points = graph.RetrieveShapeSymbols(ShapeType.Point); Assert.True(points.Count == 1); var pt = points[0] as PointSymbol; Assert.NotNull(pt); Assert.True(pt.CachedSymbols.Count == 0); var eqGoal = new EqGoal(a, 1); // a=1 graph.AddNode(eqGoal); points = graph.RetrieveShapeSymbols(ShapeType.Point); Assert.True(points.Count == 1); pt = points[0] as PointSymbol; Assert.NotNull(pt); Assert.True(pt.CachedSymbols.Count == 1); var cachedPs = pt.CachedSymbols.ToList()[0] as PointSymbol; Assert.NotNull(cachedPs); var cachedPt = cachedPs.Shape as Point; Assert.NotNull(cachedPt); Assert.True(cachedPt.XCoordinate.Equals(2.0)); Assert.True(cachedPt.YCoordinate.Equals(1.0)); var lines = graph.RetrieveShapeSymbols(ShapeType.Line); Assert.True(lines.Count == 1); var currLine = lines[0] as LineSymbol; Assert.NotNull(currLine); Assert.True(currLine.CachedSymbols.Count == 1); var cachedLineSymbol = currLine.CachedSymbols.ToList()[0] as LineSymbol; Assert.NotNull(cachedLineSymbol); var cachedLine = cachedLineSymbol.Shape as Line; Assert.NotNull(cachedLine); Assert.True(cachedLine.A.Equals(1.0)); Assert.True(cachedLine.B.Equals(1.0)); Assert.True(cachedLine.C.Equals(1.0)); }
public void TestScenario_05_WorkedExample_1() { var graph = new RelationGraph(); //general line form input var gLine = new Line(4, 1, 4); var lineSymbol = new LineSymbol(gLine); Assert.True(gLine.InputType == LineType.GeneralForm); graph.AddNode(lineSymbol); }
public void Test_Reify_1() { //a = 1, a*b = -1; //true positive var graph = new RelationGraph(); var a = new Var("a"); var b = new Var("b"); var eqGoal = new EqGoal(a, 1); var lhsTerm = new Term(Expression.Multiply, new List<object>() { a, b }); var equation = new Equation(lhsTerm, -1); graph.AddNode(eqGoal); var en = graph.AddNode(equation) as EquationNode; Assert.NotNull(en); Assert.True(en.Equation.CachedEntities.Count == 1); Assert.True(graph.Nodes.Count == 3); }
public void TestScenario_06_WorkedExample_1() { var graph = new RelationGraph(); var pt1 = new Point(2, 3); var pt1Symbol = new PointSymbol(pt1); var y = new Var("y"); var pt2 = new Point(4, y); var pt2Symbol = new PointSymbol(pt2); graph.AddNode(pt1Symbol); graph.AddNode(pt2Symbol); var m = new Var("m"); var eqGoal = new EqGoal(m, 5); graph.AddNode(eqGoal); Assert.True(graph.Nodes.Count == 4); Assert.True(graph.FoundCycleInGraph()); var ptNode = graph.RetrieveShapeNode(pt2Symbol); Assert.True(ptNode.InEdges.Count == 1); Assert.True(pt2Symbol.CachedSymbols.Count == 1); var query2 = new Query("lineG"); var queryNode2 = graph.AddNode(query2) as QueryNode; Assert.NotNull(queryNode2); Assert.True(query2.Success); Assert.True(query2.CachedEntities.Count == 1); var cachedLine = query2.CachedEntities.ToList()[0] as LineSymbol; Assert.NotNull(cachedLine); Assert.True(cachedLine.ToString().Equals("5x-y-7=0")); var query3 = new Query("k"); var queryNode3 = graph.AddNode(query3) as QueryNode; Assert.NotNull(queryNode3); Assert.True(query3.Success); Assert.True(query3.CachedEntities.Count == 1); var cachedGoal = query3.CachedEntities.ToList()[0] as EqGoal; Assert.NotNull(cachedGoal); Assert.True(cachedGoal.ToString().Equals("k=-7")); }
public void Test_Reify_2() { // a=2, b=a //true positive var graph = new RelationGraph(); var a = new Var("a"); var b = new Var("b"); var eqGoal = new EqGoal(a, 2); var equation = new Equation(b, a); graph.AddNode(eqGoal); var en = graph.AddNode(equation) as EquationNode; Assert.NotNull(en); Assert.True(en.Equation.CachedEntities.Count == 1); Assert.True(graph.Nodes.Count == 3); }
public void TestScenario_04_WorkedExample_0() { var graph = new RelationGraph(); var m = new Var("m"); var eqGoal1 = new EqGoal(m, 3); var k = new Var("k"); var eqGoal2 = new EqGoal(k, 2); graph.AddNode(eqGoal1); graph.AddNode(eqGoal2); var query1 = new Query("lineS"); var queryNode1 = graph.AddNode(query1) as QueryNode; Assert.NotNull(queryNode1); Assert.True(query1.Success); Assert.True(query1.CachedEntities.Count == 1); var cachedLine1 = query1.CachedEntities.ToList()[0] as LineSymbol; Assert.NotNull(cachedLine1); Assert.True(cachedLine1.ToString().Equals("y=3x+2")); Assert.True(cachedLine1.Traces.Count == 1); Assert.True(graph.Nodes.Count == 3); var query = new Query("lineG"); var queryNode = graph.AddNode(query) as QueryNode; Assert.NotNull(queryNode); Assert.True(query.Success); Assert.True(query.CachedEntities.Count == 1); var cachedLine = query.CachedEntities.ToList()[0] as LineSymbol; Assert.NotNull(cachedLine); Assert.True(graph.Nodes.Count == 4); Assert.True(cachedLine.Traces.Count == 2); var lt = cachedLine.Shape.GetInputType(); Assert.NotNull(lt); Assert.True(lt.Equals(LineType.Relation)); Assert.True(cachedLine.ToString().Equals("3x-y+2=0")); }
public void TestScenario_02_WorkedExample_1() { //add three nodes in sequence //delete d=5 var graph = new RelationGraph(); var pt1 = new Point("A", 2, 4); var pt1Symbol = new PointSymbol(pt1); var v = new Var("v"); var pt2 = new Point("B", 5, v); var pt2Symbol = new PointSymbol(pt2); graph.AddNode(pt1Symbol); graph.AddNode(pt2Symbol); var d = new Var("d"); var eqGoal = new EqGoal(d, 5); graph.AddNode(eqGoal); Assert.True(graph.Nodes.Count == 5); //Form a Cycle Directed Graph Assert.True(graph.FoundCycleInGraph()); var ptNode = graph.RetrieveShapeNode(pt2Symbol); Assert.True(ptNode.InEdges.Count == 2); graph.DeleteNode(eqGoal); Assert.True(graph.Nodes.Count == 2); var pt1Node = graph.RetrieveShapeNode(pt1Symbol); Assert.NotNull(pt1Node); Assert.True(pt1Node.InEdges.Count == 0); Assert.True(pt1Node.OutEdges.Count == 0); var pt2Node = graph.RetrieveShapeNode(pt2Symbol); Assert.NotNull(pt2Node); Assert.True(pt2Node.InEdges.Count == 0); Assert.True(pt2Node.OutEdges.Count == 0); }
public void Test_Reify_1() { //a = 1, a*b = -1; //true positive var graph = new RelationGraph(); var a = new Var("a"); var b = new Var("b"); var eqGoal = new EqGoal(a, 1); var lhsTerm = new Term(Expression.Multiply, new List <object>() { a, b }); var equation = new Equation(lhsTerm, -1); graph.AddNode(eqGoal); var en = graph.AddNode(equation) as EquationNode; Assert.NotNull(en); Assert.True(en.Equation.CachedEntities.Count == 1); Assert.True(graph.Nodes.Count == 3); }
public void TestScenario_01_WorkedExample_2_2() { var pt1 = new Point("A", 2, 0); var pt1Symbol = new PointSymbol(pt1); var pt2 = new Point("B", 5, 4); var pt2Symbol = new PointSymbol(pt2); var graph = new RelationGraph(); graph.AddNode(pt1Symbol); graph.AddNode(pt2Symbol); var query2 = new Query("AB", ShapeType.LineSegment); var queryNode2 = graph.AddNode(query2) as QueryNode; Assert.NotNull(queryNode2); Assert.True(queryNode2.Query.Success); Assert.True(queryNode2.Query.CachedEntities.Count == 1); var cachedLss = queryNode2.Query.CachedEntities.ToList()[0] as LineSegmentSymbol; Assert.NotNull(cachedLss); //Assert.True(cachedLss.Traces.Count == 0); var query = new Query("d"); // one constraint var queryNode = graph.AddNode(query) as QueryNode; Assert.NotNull(queryNode); Assert.True(queryNode.Query.Success); Assert.True(queryNode.Query.CachedEntities.Count == 1); var cachedGoal = queryNode.Query.CachedEntities.ToList()[0] as EqGoal; Assert.NotNull(cachedGoal); Assert.True(cachedGoal.ToString().Equals("d=5")); //Trace Check //Assert.True(cachedGoal.Traces.Count == 2); }
public void TestScenario3_CSP_1() { /* * Input sequence: * 1. y = 2x + 1 * 2: m = ? */ var graph = new RelationGraph(); var line = new Line(2, 1); var lineSymbol = new LineSymbol(line); Assert.True(line.InputType == LineType.SlopeIntercept); graph.AddNode(lineSymbol); var variable = new Var('m'); var query = new Query(variable); GraphNode gn = graph.AddNode(query); var qn = gn as QueryNode; Assert.True(qn != null); Assert.True(qn.InternalNodes.Count == 1); var goalNode = qn.InternalNodes[0] as GoalNode; Assert.NotNull(goalNode); var eqGoal = goalNode.Goal as EqGoal; Assert.NotNull(eqGoal); Assert.True(eqGoal.Rhs.Equals(2.0)); Assert.True(eqGoal.Lhs.Equals(variable)); //Output Usage Assert.True(query.CachedEntities.Count == 1); var cachedGoal = query.CachedEntities.ToList()[0] as EqGoal; Assert.NotNull(cachedGoal); Assert.True(cachedGoal.Rhs.Equals(2.0)); }
public void TestScenario3_CSP_4() { var graph = new RelationGraph(); var m = new Var('m'); var k = new Var('k'); var eqGoal1 = new EqGoal(m, 3); //m=3 var eqGoal3 = new EqGoal(m, 4); //m=4 var eqGoal2 = new EqGoal(k, 2); //k=2 graph.AddNode(eqGoal1); graph.AddNode(eqGoal2); graph.AddNode(eqGoal3); var query = new Query(ShapeType.Line); var qn = graph.AddNode(query) as QueryNode; Assert.NotNull(qn); Assert.NotNull(qn.Query); Assert.True(qn.Query.Equals(query)); Assert.True(query.Success); Assert.Null(query.FeedBack); Assert.True(qn.InternalNodes.Count == 2); Assert.True(query.CachedEntities.Count == 2); }
public void TestScenario_01_WorkedExample_2_1() { /* * 1: A(2,3) [Point] => Point * 2: B(3,4) [Point] => Point * 3: AB [Label] => [Line, LineSegment] */ var graph = new RelationGraph(); var ptA = new Point("A", 2, 3); var ptASymbol = new PointSymbol(ptA); var ptB = new Point("B", 3, 4); var ptBSymbol = new PointSymbol(ptB); graph.AddNode(ptASymbol); graph.AddNode(ptBSymbol); var query = new Query(ShapeType.Line); //deterministic var qn = graph.AddNode(query) as QueryNode; Assert.NotNull(qn); Assert.NotNull(qn.Query); Assert.True(qn.Query.Equals(query)); Assert.True(query.Success); Assert.Null(query.FeedBack); Assert.True(qn.InternalNodes.Count == 1); var sn = qn.InternalNodes[0] as ShapeNode; Assert.NotNull(sn); var ls = sn.ShapeSymbol as LineSymbol; Assert.NotNull(ls); Assert.True(ls.ToString().Equals("x-y+1=0")); }
public void TestScenario_05_WorkedExample_0() { /* * 2y+2x-y+2x+4=0 * * si= */ //(2*y)+(2*x)+(-1*y)+(2*x)+4=0 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 }); var eq = new Equation(term, 0); LineSymbol lineSymbol; bool result = eq.IsLineEquation(out lineSymbol); Assert.True(result); var graph = new RelationGraph(); graph.AddNode(lineSymbol); var query = new Query("graph"); GraphNode gn = graph.AddNode(query); var qn = gn as QueryNode; Assert.True(qn != null); Assert.True(qn.InternalNodes.Count == 1); var cachedShapeNode = qn.InternalNodes[0] as ShapeNode; Assert.NotNull(cachedShapeNode); var cachedLs = cachedShapeNode.ShapeSymbol as LineSymbol; Assert.NotNull(cachedLs); Assert.True(cachedLs.OutputType == LineType.GeneralForm); //Assert.True(cachedLs.ToString().Equals("y=-4x-4")); //Assert.True(cachedLs.Traces.Count == 5); var query2 = new Query("s"); graph.AddNode(query2); Assert.True(query2.Success); Assert.True(query2.CachedEntities.Count == 1); var gGoal = query2.CachedEntities.ToList()[0] as EqGoal; Assert.NotNull(gGoal); Assert.True(gGoal.Rhs.ToString().Equals("-4")); //Assert.True(gGoal.Traces.Count == 6); }
public void TestScenario_06_WorkedExample_2() { var graph = new RelationGraph(); var pt1 = new Point(2, 3); var pt1Symbol = new PointSymbol(pt1); var y = new Var("y"); var pt2 = new Point(4, y); var pt2Symbol = new PointSymbol(pt2); graph.AddNode(pt1Symbol); graph.AddNode(pt2Symbol); var m = new Var("m"); var eqGoal = new EqGoal(m, 5); graph.AddNode(eqGoal); Assert.True(graph.Nodes.Count == 4); Assert.True(graph.FoundCycleInGraph()); var ptNode = graph.RetrieveShapeNode(pt2Symbol); Assert.True(ptNode.InEdges.Count == 1); Assert.True(pt2Symbol.CachedSymbols.Count == 1); var query3 = new Query("k"); var queryNode3 = graph.AddNode(query3) as QueryNode; Assert.NotNull(queryNode3); Assert.True(query3.Success); Assert.True(query3.CachedEntities.Count == 1); var cachedGoal = query3.CachedEntities.ToList()[0] as EqGoal; Assert.NotNull(cachedGoal); Assert.True(cachedGoal.ToString().Equals("k=-7")); }
public void TestScenario_05_WorkedExample_0() { /* * 2y+2x-y+2x+4=0 * * si= */ //(2*y)+(2*x)+(-1*y)+(2*x)+4=0 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 }); var eq = new Equation(term, 0); LineSymbol lineSymbol; bool result = eq.IsLineEquation(out lineSymbol); Assert.True(result); var graph = new RelationGraph(); graph.AddNode(lineSymbol); var query = new Query("graph"); GraphNode gn = graph.AddNode(query); var qn = gn as QueryNode; Assert.True(qn != null); Assert.True(qn.InternalNodes.Count == 1); var cachedShapeNode = qn.InternalNodes[0] as ShapeNode; Assert.NotNull(cachedShapeNode); var cachedLs = cachedShapeNode.ShapeSymbol as LineSymbol; Assert.NotNull(cachedLs); Assert.True(cachedLs.OutputType == LineType.GeneralForm); //Assert.True(cachedLs.ToString().Equals("y=-4x-4")); //Assert.True(cachedLs.Traces.Count == 5); var query2 = new Query("s"); graph.AddNode(query2); Assert.True(query2.Success); Assert.True(query2.CachedEntities.Count == 1); var gGoal = query2.CachedEntities.ToList()[0] as EqGoal; Assert.NotNull(gGoal); Assert.True(gGoal.Rhs.ToString().Equals("-4")); //Assert.True(gGoal.Traces.Count == 6); }
public void TestScenario3_CSP_4() { var graph = new RelationGraph(); var m = new Var('m'); var k = new Var('k'); var eqGoal1 = new EqGoal(m, 3); //m=3 var eqGoal3 = new EqGoal(m, 4); //m=4 var eqGoal2 = new EqGoal(k, 2); //k=2 graph.AddNode(eqGoal1); graph.AddNode(eqGoal2); graph.AddNode(eqGoal3); var query = new Query(ShapeType.Line); var qn = graph.AddNode(query) as QueryNode; Assert.NotNull(qn); Assert.NotNull(qn.Query); Assert.True(qn.Query.Equals(query)); Assert.True(query.Success); Assert.Null(query.FeedBack); Assert.True(qn.InternalNodes.Count == 2); Assert.True(query.CachedEntities.Count == 2); }
public void TestScenario3_CSP_2() { /* * Input sequence: * 1. 2x + y + 1 = 0 * 2: m = ? */ var graph = new RelationGraph(); var line = new Line(2, 1, 1); var lineSymbol = new LineSymbol(line); Assert.True(line.InputType == LineType.GeneralForm); graph.AddNode(lineSymbol); var variable = new Var('m'); var query = new Query(variable); var qn = graph.AddNode(query) as QueryNode; Assert.True(qn != null); Assert.True(qn.InternalNodes.Count == 1); var goalNode = qn.InternalNodes[0] as GoalNode; Assert.NotNull(goalNode); var eqGoal = goalNode.Goal as EqGoal; Assert.NotNull(eqGoal); Assert.True(eqGoal.Rhs.Equals(-2)); Assert.True(eqGoal.Lhs.Equals(variable)); //Output Usage Assert.True(query.CachedEntities.Count == 1); var cachedGoal = query.CachedEntities.ToList()[0] as EqGoal; Assert.NotNull(cachedGoal); Assert.True(cachedGoal.Rhs.Equals(-2)); }
public void TestScenario_02_WorkedExample_2() { //add three nodes in sequence //delete point A var graph = new RelationGraph(); var pt1 = new Point("A", 2, 4); var pt1Symbol = new PointSymbol(pt1); var v = new Var("v"); var pt2 = new Point("B", 5, v); var pt2Symbol = new PointSymbol(pt2); graph.AddNode(pt1Symbol); graph.AddNode(pt2Symbol); var d = new Var("d"); var eqGoal = new EqGoal(d, 5); graph.AddNode(eqGoal); Assert.True(graph.Nodes.Count == 5); //Form a Cycle Directed Graph Assert.True(graph.FoundCycleInGraph()); var ptNode = graph.RetrieveShapeNode(pt2Symbol); Assert.True(ptNode.InEdges.Count == 2); graph.DeleteNode(pt1Symbol); Assert.True(graph.Nodes.Count == 2); var pt2Node = graph.RetrieveShapeNode(pt2Symbol); Assert.NotNull(pt2Node); Assert.True(pt2Node.InEdges.Count == 0); Assert.True(pt2Node.OutEdges.Count == 0); }
public Reasoner() { RelationGraph = new RelationGraph(); _cache = new ObservableCollection<KeyValuePair<object, object>>(); _preCache = new Dictionary<object, object>(); }
public void TestLine_Unify_Reify_0() { var graph = new RelationGraph(); var a = new Var("a"); var line = new Line(a, 1, 1.0); var ls = new LineSymbol(line); graph.AddNode(ls); List <ShapeSymbol> lines = graph.RetrieveShapeSymbols(ShapeType.Line); Assert.True(lines.Count == 1); var lineSymbol = lines[0] as LineSymbol; Assert.NotNull(lineSymbol); Assert.True(lineSymbol.CachedSymbols.Count == 0); var eqGoal = new EqGoal(a, 1); // a=1 graph.AddNode(eqGoal); lines = graph.RetrieveShapeSymbols(ShapeType.Line); Assert.True(lines.Count == 1); var currLine = lines[0] as LineSymbol; Assert.NotNull(currLine); Assert.True(currLine.CachedSymbols.Count == 1); var cachedLineSymbol = currLine.CachedSymbols.ToList()[0] as LineSymbol; Assert.NotNull(cachedLineSymbol); var cachedLine = cachedLineSymbol.Shape as Line; Assert.NotNull(cachedLine); Assert.True(cachedLine.A.Equals(1.0)); Assert.True(cachedLine.B.Equals(1.0)); Assert.True(cachedLine.C.Equals(1.0)); graph.DeleteNode(eqGoal); lines = graph.RetrieveShapeSymbols(ShapeType.Line); Assert.True(lines.Count == 1); currLine = lines[0] as LineSymbol; Assert.NotNull(currLine); Assert.True(currLine.CachedSymbols.Count == 0); Assert.True(currLine.CachedGoals.Count == 0); var eqGoal2 = new EqGoal(a, 3); graph.AddNode(eqGoal2); lines = graph.RetrieveShapeSymbols(ShapeType.Line); Assert.True(lines.Count == 1); currLine = lines[0] as LineSymbol; Assert.NotNull(currLine); Assert.True(currLine.CachedSymbols.Count == 1); Assert.True(currLine.CachedGoals.Count == 1); graph.DeleteNode(eqGoal2); lines = graph.RetrieveShapeSymbols(ShapeType.Line); Assert.True(lines.Count == 1); currLine = lines[0] as LineSymbol; Assert.NotNull(currLine); Assert.True(currLine.CachedSymbols.Count == 0); Assert.True(currLine.CachedGoals.Count == 0); }
public void TestLine_Unify_Reify_2() { /* * (2,x), (3,4) * line pass through two points */ var graph = new RelationGraph(); var x = new Var('x'); var point = new Point(2, x); var ps = new PointSymbol(point); var point1 = new Point(3, 4); var ps1 = new PointSymbol(point1); graph.AddNode(ps); graph.AddNode(ps1); var query = new Query(ShapeType.Line); var queryNode = graph.AddNode(query) as QueryNode; Assert.NotNull(queryNode); Assert.True(queryNode.InternalNodes.Count == 1); Assert.True(query.Success); Assert.True(query.CachedEntities.Count == 1); var cachedLine = query.CachedEntities.ToList()[0] as LineSymbol; Assert.NotNull(cachedLine); Assert.True(cachedLine.CachedSymbols.Count == 0); var eqGoal = new EqGoal(x, 1); // x=2 graph.AddNode(eqGoal); queryNode = graph.RetrieveQueryNode(query); Assert.NotNull(queryNode); Assert.True(queryNode.InternalNodes.Count == 1); Assert.True(query.Success); Assert.True(query.CachedEntities.Count == 1); cachedLine = query.CachedEntities.ToList()[0] as LineSymbol; Assert.NotNull(cachedLine); var eqGoal2 = new EqGoal(x, 2); // x=2 graph.AddNode(eqGoal2); queryNode = graph.RetrieveQueryNode(query); Assert.NotNull(queryNode); Assert.True(queryNode.InternalNodes.Count == 1); Assert.True(query.Success); Assert.True(query.CachedEntities.Count == 2); cachedLine = query.CachedEntities.ToList()[0] as LineSymbol; Assert.NotNull(cachedLine); /* graph.DeleteNode(eqGoal2); * queryNode = graph.RetrieveQueryNode(query); * Assert.NotNull(queryNode); * Assert.True(queryNode.InternalNodes.Count == 1); * Assert.True(query.Success); * Assert.True(query.CachedEntities.Count == 1); * cachedLine = query.CachedEntities.ToList()[0] as LineSymbol; * Assert.NotNull(cachedLine); * Assert.True(cachedLine.CachedSymbols.Count == 1); * Assert.True(graph.Nodes.Count == 4); * * graph.DeleteNode(eqGoal); * queryNode = graph.RetrieveQueryNode(query); * Assert.NotNull(queryNode); * Assert.True(queryNode.InternalNodes.Count == 1); * Assert.True(query.Success); * Assert.True(query.CachedEntities.Count == 1); * cachedLine = query.CachedEntities.ToList()[0] as LineSymbol; * Assert.NotNull(cachedLine); * Assert.True(cachedLine.CachedSymbols.Count == 0); * Assert.True(graph.Nodes.Count == 3);*/ }
public void TestLine_Unify_Reify_1() { var graph = new RelationGraph(); var a = new Var('a'); var point = new Point(2, a); var ps = new PointSymbol(point); graph.AddNode(ps); var line = new Line(1, a, 1.0); var ls = new LineSymbol(line); graph.AddNode(ls); List<ShapeSymbol> points = graph.RetrieveShapeSymbols(ShapeType.Point); Assert.True(points.Count == 1); var pt = points[0] as PointSymbol; Assert.NotNull(pt); Assert.True(pt.CachedSymbols.Count == 0); var eqGoal = new EqGoal(a, 1); // a=1 graph.AddNode(eqGoal); points = graph.RetrieveShapeSymbols(ShapeType.Point); Assert.True(points.Count == 1); pt = points[0] as PointSymbol; Assert.NotNull(pt); Assert.True(pt.CachedSymbols.Count == 1); var cachedPs = pt.CachedSymbols.ToList()[0] as PointSymbol; Assert.NotNull(cachedPs); var cachedPt = cachedPs.Shape as Point; Assert.NotNull(cachedPt); Assert.True(cachedPt.XCoordinate.Equals(2.0)); Assert.True(cachedPt.YCoordinate.Equals(1.0)); var lines = graph.RetrieveShapeSymbols(ShapeType.Line); Assert.True(lines.Count == 1); var currLine = lines[0] as LineSymbol; Assert.NotNull(currLine); Assert.True(currLine.CachedSymbols.Count == 1); var cachedLineSymbol = currLine.CachedSymbols.ToList()[0] as LineSymbol; Assert.NotNull(cachedLineSymbol); var cachedLine = cachedLineSymbol.Shape as Line; Assert.NotNull(cachedLine); Assert.True(cachedLine.A.Equals(1.0)); Assert.True(cachedLine.B.Equals(1.0)); Assert.True(cachedLine.C.Equals(1.0)); }
public void TestScenario_01_WorkedExample_2_2() { var pt1 = new Point("A", 2, 0); var pt1Symbol = new PointSymbol(pt1); var pt2 = new Point("B", 5, 4); var pt2Symbol = new PointSymbol(pt2); var graph = new RelationGraph(); graph.AddNode(pt1Symbol); graph.AddNode(pt2Symbol); var query2 = new Query("AB", ShapeType.LineSegment); var queryNode2 = graph.AddNode(query2) as QueryNode; Assert.NotNull(queryNode2); Assert.True(queryNode2.Query.Success); Assert.True(queryNode2.Query.CachedEntities.Count == 1); var cachedLss = queryNode2.Query.CachedEntities.ToList()[0] as LineSegmentSymbol; Assert.NotNull(cachedLss); //Assert.True(cachedLss.Traces.Count == 0); var query = new Query("d"); // one constraint var queryNode = graph.AddNode(query) as QueryNode; Assert.NotNull(queryNode); Assert.True(queryNode.Query.Success); Assert.True(queryNode.Query.CachedEntities.Count == 1); var cachedGoal = queryNode.Query.CachedEntities.ToList()[0] as EqGoal; Assert.NotNull(cachedGoal); Assert.True(cachedGoal.ToString().Equals("d=5")); //Trace Check //Assert.True(cachedGoal.Traces.Count == 2); }
public void TestScenario_02_WorkedExample_0() { //add three nodes in sequence var graph = new RelationGraph(); var pt1 = new Point("A", 2, 4); var pt1Symbol = new PointSymbol(pt1); var v = new Var("v"); var pt2 = new Point("B", 5, v); var pt2Symbol = new PointSymbol(pt2); graph.AddNode(pt1Symbol); graph.AddNode(pt2Symbol); var d = new Var("d"); var eqGoal = new EqGoal(d, 5); graph.AddNode(eqGoal); Assert.True(graph.Nodes.Count == 5); //Form a Cycle Directed Graph Assert.True(graph.FoundCycleInGraph()); var ptNode = graph.RetrieveShapeNode(pt2Symbol); Assert.True(ptNode.InEdges.Count == 2); Assert.True(pt2Symbol.CachedSymbols.Count == 2); var query = new Query("v"); var queryNode = graph.AddNode(query) as QueryNode; Assert.NotNull(queryNode); Assert.True(query.Success); Assert.True(query.CachedEntities.Count == 2); var gGoal1 = query.CachedEntities.ToList()[0] as EqGoal; Assert.NotNull(gGoal1); var query2 = new Query("AB"); var queryNode2 = graph.AddNode(query2) as QueryNode; Assert.Null(queryNode2); Assert.False(query2.Success); query2.Constraint2 = ShapeType.LineSegment; queryNode2 = graph.AddNode(query2) as QueryNode; Assert.NotNull(queryNode2); Assert.True(query2.Success); Assert.True(query2.CachedEntities.ToList().Count == 2); /* query2.Constraint2 = ShapeType.Line; queryNode2 = graph.AddNode(query2) as QueryNode; Assert.NotNull(queryNode2); Assert.True(query2.Success); Assert.True(query2.CachedEntities.ToList().Count == 2);*/ //Instructional Scaffolding Verify (Trace Generation) //1. check v=0's trace Assert.True(gGoal1.Traces.Count == 3); //2. check point trace Assert.True(pt2Symbol.CachedSymbols.Count == 2); var cachedPt1 = pt2Symbol.CachedSymbols.ToList()[0]; Assert.NotNull(cachedPt1); Assert.True(cachedPt1.Traces.Count == 4); var cachedPt2 = pt2Symbol.CachedSymbols.ToList()[1]; Assert.NotNull(cachedPt2); Assert.True(cachedPt2.Traces.Count == 4); //3. check AB's plotting trace var cachedLineSeg1 = query2.CachedEntities.ToList()[0] as LineSegmentSymbol; Assert.NotNull(cachedLineSeg1); //Assert.True(cachedLineSeg1.Traces.Count == 3); }
public void TestScenario_28_WorkedExample_0() { var graph = new RelationGraph(); var y = new Var("y"); var pt1 = new Point("A", 2, y); var pt1Symbol = new PointSymbol(pt1); var pt2 = new Point("B", -1, 4); var pt2Symbol = new PointSymbol(pt2); graph.AddNode(pt1Symbol); graph.AddNode(pt2Symbol); var eqGoal = new EqGoal(y, -1); graph.AddNode(eqGoal); Assert.True(pt1Symbol.CachedSymbols.Count == 1); var ptNode = graph.RetrieveShapeNode(pt1Symbol); Assert.True(ptNode.InEdges.Count == 1); var query2 = new Query("d"); var queryNode2 = graph.AddNode(query2) as QueryNode; Assert.NotNull(queryNode2); Assert.True(query2.Success); Assert.True(query2.CachedEntities.Count == 1); var cachedGoal = query2.CachedEntities.ToList()[0] as EqGoal; Assert.NotNull(cachedGoal); Assert.True(cachedGoal.ToString().Equals("d=5.83")); }
public void TestScenario2_Relation_1() { /* * 1: A(2,3) [Point] => Point * 2: B(3,4) [Point] => Point * 3: AB [Label] => [Line, LineSegment] * 4: ask slope = ? */ var graph = new RelationGraph(); var ptA = new Point("A", 2, 3); var ptASymbol = new PointSymbol(ptA); var ptB = new Point("B", 3, 4); var ptBSymbol = new PointSymbol(ptB); graph.AddNode(ptASymbol); graph.AddNode(ptBSymbol); const string label = "AB"; var query = new Query(label, ShapeType.Line); var qn = graph.AddNode(query) as QueryNode; Assert.NotNull(qn); Assert.NotNull(qn.Query); Assert.True(qn.Query.Equals(query)); Assert.True(query.Success); Assert.Null(query.FeedBack); Assert.True(qn.InternalNodes.Count == 1); var sn = qn.InternalNodes[0] as ShapeNode; Assert.NotNull(sn); var ls = sn.ShapeSymbol as LineSymbol; Assert.NotNull(ls); Assert.True(ls.ToString().Equals("x-y+1=0")); var shapes = graph.RetrieveShapeNodes(); Assert.True(shapes.Count == 3); var variable = new Var('m'); var query1 = new Query(variable); //m= qn = graph.AddNode(query1) as QueryNode; Assert.NotNull(qn); Assert.NotNull(qn.Query); Assert.True(query.Success); Assert.Null(query.FeedBack); Assert.True(qn.InternalNodes.Count == 1); var gn = qn.InternalNodes[0] as GoalNode; Assert.NotNull(gn); var eqGoal = gn.Goal as EqGoal; Assert.NotNull(eqGoal); Assert.True(eqGoal.Lhs.Equals(variable)); Assert.True(eqGoal.Rhs.Equals(1)); shapes = graph.RetrieveShapeNodes(); Assert.True(shapes.Count == 3); }
public void TestPoint_Unify_Reify_0() { var graph = new RelationGraph(); //true positive var x = new Var('x'); var y = new Var('y'); var point = new Point(x, y); var ps = new PointSymbol(point); graph.AddNode(ps); Assert.True(graph.Nodes.Count == 1); /* * * Current Status: * * (x,y) * * next input: * * x=1 */ var eqGoal = new EqGoal(x, 1); // x=1 graph.AddNode(eqGoal); Assert.True(graph.Nodes.Count == 2); List <ShapeSymbol> shapes = graph.RetrieveShapeSymbols(); Assert.True(shapes.Count == 1); var pt = shapes[0] as PointSymbol; Assert.NotNull(pt); Assert.True(pt.Equals(ps)); Assert.True(pt.CachedGoals.Count == 1); Assert.True(pt.CachedSymbols.Count == 1); var gPointSymbol = pt.CachedSymbols.ToList()[0] as PointSymbol; Assert.NotNull(gPointSymbol); var gPoint = gPointSymbol.Shape as Point; Assert.NotNull(gPoint); Assert.False(gPoint.Concrete); Assert.True(1.0.Equals(gPoint.XCoordinate)); Assert.True(y.Equals(gPoint.YCoordinate)); /****** * current status: * (1,y) * * next input: * x = 2 ****/ #region Block 2 var eqGoal1 = new EqGoal(x, 2); // x=2 graph.AddNode(eqGoal1); shapes = graph.RetrieveShapeSymbols(); Assert.True(shapes.Count == 1); pt = shapes[0] as PointSymbol; Assert.NotNull(pt); Assert.True(pt.Equals(ps)); Assert.True(pt.CachedGoals.Count == 2); Assert.True(pt.CachedSymbols.Count == 2); Assert.False(point.Concrete); #endregion /****** * current status: * (1,y) * (2,y) * * next input: * y = 1 ****/ #region Block 3 var eqGoal2 = new EqGoal(y, 1); // y = 1 graph.AddNode(eqGoal2); shapes = graph.RetrieveShapeSymbols(); Assert.True(shapes.Count == 1); pt = shapes[0] as PointSymbol; Assert.False(point.Concrete); Assert.True(ps.CachedGoals.Count == 3); Assert.True(ps.CachedSymbols.Count == 2); foreach (var ss in ps.CachedSymbols) { Assert.True(ss.Shape.Concrete); } var goals = graph.RetrieveGoals(); Assert.True(goals.Count == 3); #endregion /****** * current status: * (1,1) * (2,1) * * next input: * y = 2 ****/ #region Block 4 var eqGoal3 = new EqGoal(y, 2); // y = 2 graph.AddNode(eqGoal3); shapes = graph.RetrieveShapeSymbols(); Assert.True(shapes.Count == 1); ps = shapes[0] as PointSymbol; Assert.NotNull(ps); Assert.False(ps.Shape.Concrete); Assert.True(ps.CachedGoals.Count == 4); Assert.True(ps.CachedSymbols.Count == 4); foreach (var css in ps.CachedSymbols) { Assert.True(css.Shape.Concrete); } #endregion /* * current status: * (1,1), (2,1), (1,2), (2,2) * * next input: * delete y = 2 * */ #region Block 5 graph.DeleteNode(eqGoal3); shapes = graph.RetrieveShapeSymbols(); Assert.True(shapes.Count == 1); pt = shapes[0] as PointSymbol; Assert.NotNull(pt); Assert.False(pt.Shape.Concrete); Assert.True(pt.CachedGoals.Count == 3); Assert.True(pt.CachedSymbols.Count == 2); foreach (var ss in pt.CachedSymbols) { Assert.True(ss.Shape.Concrete); } goals = graph.RetrieveGoals(); Assert.True(goals.Count == 3); #endregion /* * current status: * (1,1), (2,1) * * next input: * delete y = 1 * */ #region Block 6 graph.DeleteNode(eqGoal2); shapes = graph.RetrieveShapeSymbols(); Assert.True(shapes.Count == 1); pt = shapes[0] as PointSymbol; Assert.NotNull(pt); Assert.False(pt.Shape.Concrete); Assert.True(pt.CachedGoals.Count == 3); Assert.True(pt.CachedSymbols.Count == 2); #endregion /* foreach (var shape in pt.CachedSymbols) * { * Assert.False(shape.Shape.Concrete); * } * goals = graph.RetrieveGoals(); * Assert.True(goals.Count == 2); * * * ///////////////////////////////////////////// * * graph.DeleteNode(ps); * shapes = graph.RetrieveShapeSymbols(); * Assert.True(shapes.Count == 0);*/ }
public void TestScenario3_CSP_3() { var graph = new RelationGraph(); var m = new Var('m'); var k = new Var('k'); var eqGoal1 = new EqGoal(m, 3); //m=3 var eqGoal2 = new EqGoal(k, 2); //k=2 graph.AddNode(eqGoal1); graph.AddNode(eqGoal2); var query = new Query(ShapeType.Line); var qn = graph.AddNode(query) as QueryNode; Assert.NotNull(qn); Assert.NotNull(qn.Query); Assert.True(qn.Query.Equals(query)); Assert.True(query.Success); Assert.Null(query.FeedBack); Assert.True(qn.InternalNodes.Count == 1); var sn = qn.InternalNodes[0] as ShapeNode; Assert.NotNull(sn); var ls = sn.ShapeSymbol as LineSymbol; Assert.NotNull(ls); Assert.True(ls.ToString().Equals("y=3x+2")); //Output Usage Assert.True(query.CachedEntities.Count == 1); ls = query.CachedEntities.ToList()[0] as LineSymbol; Assert.NotNull(ls); Assert.True(ls.ToString().Equals("y=3x+2")); }
public void TestScenario_02_WorkedExample_0() { //add three nodes in sequence var graph = new RelationGraph(); var pt1 = new Point("A", 2, 4); var pt1Symbol = new PointSymbol(pt1); var v = new Var("v"); var pt2 = new Point("B", 5, v); var pt2Symbol = new PointSymbol(pt2); graph.AddNode(pt1Symbol); graph.AddNode(pt2Symbol); var d = new Var("d"); var eqGoal = new EqGoal(d, 5); graph.AddNode(eqGoal); Assert.True(graph.Nodes.Count == 5); //Form a Cycle Directed Graph Assert.True(graph.FoundCycleInGraph()); var ptNode = graph.RetrieveShapeNode(pt2Symbol); Assert.True(ptNode.InEdges.Count == 2); Assert.True(pt2Symbol.CachedSymbols.Count == 2); var query = new Query("v"); var queryNode = graph.AddNode(query) as QueryNode; Assert.NotNull(queryNode); Assert.True(query.Success); Assert.True(query.CachedEntities.Count == 2); var gGoal1 = query.CachedEntities.ToList()[0] as EqGoal; Assert.NotNull(gGoal1); var query2 = new Query("AB"); var queryNode2 = graph.AddNode(query2) as QueryNode; Assert.Null(queryNode2); Assert.False(query2.Success); query2.Constraint2 = ShapeType.LineSegment; queryNode2 = graph.AddNode(query2) as QueryNode; Assert.NotNull(queryNode2); Assert.True(query2.Success); Assert.True(query2.CachedEntities.ToList().Count == 2); /* query2.Constraint2 = ShapeType.Line; * queryNode2 = graph.AddNode(query2) as QueryNode; * Assert.NotNull(queryNode2); * Assert.True(query2.Success); * Assert.True(query2.CachedEntities.ToList().Count == 2);*/ //Instructional Scaffolding Verify (Trace Generation) //1. check v=0's trace Assert.True(gGoal1.Traces.Count == 3); //2. check point trace Assert.True(pt2Symbol.CachedSymbols.Count == 2); var cachedPt1 = pt2Symbol.CachedSymbols.ToList()[0]; Assert.NotNull(cachedPt1); Assert.True(cachedPt1.Traces.Count == 4); var cachedPt2 = pt2Symbol.CachedSymbols.ToList()[1]; Assert.NotNull(cachedPt2); Assert.True(cachedPt2.Traces.Count == 4); //3. check AB's plotting trace var cachedLineSeg1 = query2.CachedEntities.ToList()[0] as LineSegmentSymbol; Assert.NotNull(cachedLineSeg1); //Assert.True(cachedLineSeg1.Traces.Count == 3); }
public void TestScenario_04_WorkedExample_1() { var graph = new RelationGraph(); var m = new Var("m"); var eqGoal1 = new EqGoal(m, 3); var k = new Var("k"); var eqGoal2 = new EqGoal(k, 2); graph.AddNode(eqGoal1); graph.AddNode(eqGoal2); var query = new Query("lineG"); var queryNode = graph.AddNode(query) as QueryNode; Assert.NotNull(queryNode); Assert.True(query.Success); Assert.True(query.CachedEntities.Count == 1); var cachedLine = query.CachedEntities.ToList()[0] as LineSymbol; Assert.NotNull(cachedLine); var lt = cachedLine.Shape.GetInputType(); Assert.NotNull(lt); Assert.True(lt.Equals(LineType.Relation)); Assert.True(cachedLine.ToString().Equals("3x-y+2=0")); Assert.True(cachedLine.Traces.Count == 2); var query1 = new Query("lineS"); var queryNode1 = graph.AddNode(query1) as QueryNode; Assert.NotNull(queryNode1); Assert.True(query1.Success); Assert.True(query1.CachedEntities.Count == 1); var cachedLine1 = query1.CachedEntities.ToList()[0] as LineSymbol; Assert.NotNull(cachedLine1); Assert.True(cachedLine1.ToString().Equals("y=3x+2")); Assert.True(cachedLine1.Traces.Count == 1); }
public void Test_Reify_2() { // a=2, b=a //true positive var graph = new RelationGraph(); var a = new Var("a"); var b = new Var("b"); var eqGoal = new EqGoal(a, 2); var equation = new Equation(b, a); graph.AddNode(eqGoal); var en = graph.AddNode(equation) as EquationNode; Assert.NotNull(en); Assert.True(en.Equation.CachedEntities.Count == 1); Assert.True(graph.Nodes.Count == 3); }
public void TestScenario_05_WorkedExample_1() { var graph = new RelationGraph(); //general line form input var gLine = new Line(4, 1, 4); var lineSymbol = new LineSymbol(gLine); Assert.True(gLine.InputType == LineType.GeneralForm); graph.AddNode(lineSymbol); }
public void TestScenario_01_WorkedExample_2_0() { /* * 1: A(2,3) [Point] => Point * 2: B(3,4) [Point] => Point * 3: AB [Label] => [Line, LineSegment] */ var graph = new RelationGraph(); var ptA = new Point("A", 2, 3); var ptASymbol = new PointSymbol(ptA); var ptB = new Point("B", 3, 4); var ptBSymbol = new PointSymbol(ptB); graph.AddNode(ptASymbol); graph.AddNode(ptBSymbol); const string label = "AB"; var query = new Query(label); var qn = graph.AddNode(query); Assert.Null(qn); Assert.False(query.Success); Assert.NotNull(query.FeedBack); var types = query.FeedBack as List<ShapeType>; Assert.NotNull(types); Assert.True(types.Count == 2); var shapes = graph.RetrieveShapes(); Assert.True(shapes.Count == 2); }
public void TestScenario_06_WorkedExample_3() { var graph = new RelationGraph(); var pt1 = new Point(2, 3); var pt1Symbol = new PointSymbol(pt1); graph.AddNode(pt1Symbol); var query2 = new Query("lineG"); var queryNode2 = graph.AddNode(query2) as QueryNode; Assert.Null(queryNode2); Assert.False(query2.Success); var y = new Var("y"); var pt2 = new Point(4, y); var pt2Symbol = new PointSymbol(pt2); graph.AddNode(pt2Symbol); var m = new Var("m"); var eqGoal = new EqGoal(m, 5); graph.AddNode(eqGoal); Assert.True(graph.Nodes.Count == 5); Assert.True(graph.FoundCycleInGraph()); var ptNode = graph.RetrieveShapeNode(pt2Symbol); Assert.True(ptNode.InEdges.Count == 1); Assert.True(pt2Symbol.CachedSymbols.Count == 1); Assert.True(query2.Success); Assert.True(query2.CachedEntities.Count == 1); var cachedLine = query2.CachedEntities.ToList()[0] as LineSymbol; Assert.NotNull(cachedLine); Assert.True(cachedLine.ToString().Equals("5x-y-7=0")); }
public void TestLine_Unify_Reify_2() { /* * (2,x), (3,4) * line pass through two points */ var graph = new RelationGraph(); var x = new Var('x'); var point = new Point(2, x); var ps = new PointSymbol(point); var point1 = new Point(3, 4); var ps1 = new PointSymbol(point1); graph.AddNode(ps); graph.AddNode(ps1); var query = new Query(ShapeType.Line); var queryNode = graph.AddNode(query) as QueryNode; Assert.NotNull(queryNode); Assert.True(queryNode.InternalNodes.Count == 1); Assert.True(query.Success); Assert.True(query.CachedEntities.Count == 1); var cachedLine = query.CachedEntities.ToList()[0] as LineSymbol; Assert.NotNull(cachedLine); Assert.True(cachedLine.CachedSymbols.Count == 0); var eqGoal = new EqGoal(x, 1); // x=2 graph.AddNode(eqGoal); queryNode = graph.RetrieveQueryNode(query); Assert.NotNull(queryNode); Assert.True(queryNode.InternalNodes.Count == 1); Assert.True(query.Success); Assert.True(query.CachedEntities.Count == 1); cachedLine = query.CachedEntities.ToList()[0] as LineSymbol; Assert.NotNull(cachedLine); var eqGoal2 = new EqGoal(x, 2); // x=2 graph.AddNode(eqGoal2); queryNode = graph.RetrieveQueryNode(query); Assert.NotNull(queryNode); Assert.True(queryNode.InternalNodes.Count == 1); Assert.True(query.Success); Assert.True(query.CachedEntities.Count == 2); cachedLine = query.CachedEntities.ToList()[0] as LineSymbol; Assert.NotNull(cachedLine); /* graph.DeleteNode(eqGoal2); queryNode = graph.RetrieveQueryNode(query); Assert.NotNull(queryNode); Assert.True(queryNode.InternalNodes.Count == 1); Assert.True(query.Success); Assert.True(query.CachedEntities.Count == 1); cachedLine = query.CachedEntities.ToList()[0] as LineSymbol; Assert.NotNull(cachedLine); Assert.True(cachedLine.CachedSymbols.Count == 1); Assert.True(graph.Nodes.Count == 4); graph.DeleteNode(eqGoal); queryNode = graph.RetrieveQueryNode(query); Assert.NotNull(queryNode); Assert.True(queryNode.InternalNodes.Count == 1); Assert.True(query.Success); Assert.True(query.CachedEntities.Count == 1); cachedLine = query.CachedEntities.ToList()[0] as LineSymbol; Assert.NotNull(cachedLine); Assert.True(cachedLine.CachedSymbols.Count == 0); Assert.True(graph.Nodes.Count == 3);*/ }
public void TestScenario_01_WorkedExample_1() { var pt1 = new Point("A", 2, 0); var pt1Symbol = new PointSymbol(pt1); var pt2 = new Point("B", 5, 4); var pt2Symbol = new PointSymbol(pt2); var graph = new RelationGraph(); graph.AddNode(pt1Symbol); graph.AddNode(pt2Symbol); var query = new Query("d"); // one constraint var queryNode = graph.AddNode(query) as QueryNode; Assert.NotNull(queryNode); Assert.True(queryNode.Query.Success); Assert.True(queryNode.Query.CachedEntities.Count == 1); var cachedGoal = queryNode.Query.CachedEntities.ToList()[0] as EqGoal; Assert.NotNull(cachedGoal); Assert.True(cachedGoal.ToString().Equals("d=5")); //Trace Check /* Assert.True(cachedGoal.Traces.Count == 3); Assert.True(cachedGoal._innerLoop.Count == 0);*/ }
public void TestPoint_Unify_Reify_0() { var graph = new RelationGraph(); //true positive var x = new Var('x'); var y = new Var('y'); var point = new Point(x, y); var ps = new PointSymbol(point); graph.AddNode(ps); Assert.True(graph.Nodes.Count == 1); /* * * Current Status: * * (x,y) * * next input: * * x=1 */ var eqGoal = new EqGoal(x, 1); // x=1 graph.AddNode(eqGoal); Assert.True(graph.Nodes.Count == 2); List<ShapeSymbol> shapes = graph.RetrieveShapeSymbols(); Assert.True(shapes.Count == 1); var pt = shapes[0] as PointSymbol; Assert.NotNull(pt); Assert.True(pt.Equals(ps)); Assert.True(pt.CachedGoals.Count == 1); Assert.True(pt.CachedSymbols.Count == 1); var gPointSymbol = pt.CachedSymbols.ToList()[0] as PointSymbol; Assert.NotNull(gPointSymbol); var gPoint = gPointSymbol.Shape as Point; Assert.NotNull(gPoint); Assert.False(gPoint.Concrete); Assert.True(1.0.Equals(gPoint.XCoordinate)); Assert.True(y.Equals(gPoint.YCoordinate)); /****** * current status: * (1,y) * * next input: * x = 2 ****/ #region Block 2 var eqGoal1 = new EqGoal(x, 2); // x=2 graph.AddNode(eqGoal1); shapes = graph.RetrieveShapeSymbols(); Assert.True(shapes.Count == 1); pt = shapes[0] as PointSymbol; Assert.NotNull(pt); Assert.True(pt.Equals(ps)); Assert.True(pt.CachedGoals.Count == 2); Assert.True(pt.CachedSymbols.Count == 2); Assert.False(point.Concrete); #endregion /****** * current status: * (1,y) * (2,y) * * next input: * y = 1 ****/ #region Block 3 var eqGoal2 = new EqGoal(y, 1); // y = 1 graph.AddNode(eqGoal2); shapes = graph.RetrieveShapeSymbols(); Assert.True(shapes.Count == 1); pt = shapes[0] as PointSymbol; Assert.False(point.Concrete); Assert.True(ps.CachedGoals.Count == 3); Assert.True(ps.CachedSymbols.Count == 2); foreach (var ss in ps.CachedSymbols) { Assert.True(ss.Shape.Concrete); } var goals = graph.RetrieveGoals(); Assert.True(goals.Count == 3); #endregion /****** * current status: * (1,1) * (2,1) * * next input: * y = 2 ****/ #region Block 4 var eqGoal3 = new EqGoal(y, 2); // y = 2 graph.AddNode(eqGoal3); shapes = graph.RetrieveShapeSymbols(); Assert.True(shapes.Count == 1); ps = shapes[0] as PointSymbol; Assert.NotNull(ps); Assert.False(ps.Shape.Concrete); Assert.True(ps.CachedGoals.Count == 4); Assert.True(ps.CachedSymbols.Count == 4); foreach (var css in ps.CachedSymbols) { Assert.True(css.Shape.Concrete); } #endregion /* * current status: * (1,1), (2,1), (1,2), (2,2) * * next input: * delete y = 2 * */ #region Block 5 graph.DeleteNode(eqGoal3); shapes = graph.RetrieveShapeSymbols(); Assert.True(shapes.Count == 1); pt = shapes[0] as PointSymbol; Assert.NotNull(pt); Assert.False(pt.Shape.Concrete); Assert.True(pt.CachedGoals.Count == 3); Assert.True(pt.CachedSymbols.Count == 2); foreach (var ss in pt.CachedSymbols) { Assert.True(ss.Shape.Concrete); } goals = graph.RetrieveGoals(); Assert.True(goals.Count == 3); #endregion /* * current status: * (1,1), (2,1) * * next input: * delete y = 1 * */ #region Block 6 graph.DeleteNode(eqGoal2); shapes = graph.RetrieveShapeSymbols(); Assert.True(shapes.Count == 1); pt = shapes[0] as PointSymbol; Assert.NotNull(pt); Assert.False(pt.Shape.Concrete); Assert.True(pt.CachedGoals.Count == 3); Assert.True(pt.CachedSymbols.Count == 2); #endregion /* foreach (var shape in pt.CachedSymbols) { Assert.False(shape.Shape.Concrete); } goals = graph.RetrieveGoals(); Assert.True(goals.Count == 2); ///////////////////////////////////////////// graph.DeleteNode(ps); shapes = graph.RetrieveShapeSymbols(); Assert.True(shapes.Count == 0);*/ }