/// <summary> /// gEdge constructor by line /// </summary> /// <param name="line">line</param> /// <returns name="edge">edge</returns> //public static gEdge ByLine(Line line) //{ // gVertex start = gVertex.ByCoordinates(line.StartPoint.X, line.StartPoint.Y, line.StartPoint.Z); // gVertex end = gVertex.ByCoordinates(line.EndPoint.X, line.EndPoint.Y, line.EndPoint.Z); // return new gEdge(start, end); //} #endregion /// <summary> /// Method to check if vertex belongs to edge /// </summary> /// <param name="vertex"></param> /// <returns></returns> public bool Contains(gVertex vertex) { return(StartVertex.Equals(vertex) || EndVertex.Equals(vertex)); }
/// <summary> /// Method to return the other end vertex of the gEdge /// </summary> /// <param name="vertex"></param> /// <returns></returns> public gVertex GetVertexPair(gVertex vertex) { return((StartVertex.Equals(vertex)) ? EndVertex : StartVertex); }
private void OnStartVertex([NotNull] TVertex vertex) { Debug.Assert(vertex != null); StartVertex?.Invoke(vertex); }
/// <summary> /// Override of GetHashCode Method /// </summary> /// <returns></returns> public override int GetHashCode() { return(StartVertex.GetHashCode() ^ EndVertex.GetHashCode()); }
public bool Connects(Vertex <TV, TE, TF> start, Vertex <TV, TE, TF> end) { return(EndVertex.Equals(end) && StartVertex.Equals(start)); }
public override int GetHashCode() => StartVertex.GetHashCode() ^ EndVertex.GetHashCode() ^ Weight;
public override string ToString() { return("{ " + StartVertex.ToString() + ", " + EndVertex.ToString() + " }"); }
/// <inheritdoc/> public void OnStartVertex(TGraph g, TVertex v) => StartVertex?.Invoke(g, v);
/// <summary> /// Creates a String Representation of this HalfEdge. /// </summary> /// <returns>String representation of this HalfEdge.</returns> public override string ToString() { return($"From: {StartVertex.ToString()} " + $"To: {EndVertex.ToString()}"); }
public void NestedSubScheduleWithLinkBackToRootSchedule() { var id = new ScheduleId(); var subSubScheduleId = new ScheduleId(); ISchedule subSubSchedule; { var subGraph = new BidirectionalGraph <IScheduleVertex, ScheduleEdge>(); var start = new StartVertex(1); var end = new EndVertex(2); var vertex1 = new SubScheduleVertex(3, id); subGraph.AddVertex(start); subGraph.AddVertex(end); subGraph.AddVertex(vertex1); subGraph.AddEdge(new ScheduleEdge(start, vertex1)); subGraph.AddEdge(new ScheduleEdge(vertex1, end)); subSubSchedule = new Schedule(subGraph, start, end); } var subScheduleId = new ScheduleId(); ISchedule subSchedule; { var subGraph = new BidirectionalGraph <IScheduleVertex, ScheduleEdge>(); var start = new StartVertex(1); var end = new EndVertex(2); var vertex1 = new SubScheduleVertex(3, subSubScheduleId); subGraph.AddVertex(start); subGraph.AddVertex(end); subGraph.AddVertex(vertex1); subGraph.AddEdge(new ScheduleEdge(start, vertex1)); subGraph.AddEdge(new ScheduleEdge(vertex1, end)); subSchedule = new Schedule(subGraph, start, end); } IScheduleVertex errorVertex; Schedule schedule; { var graph = new BidirectionalGraph <IScheduleVertex, ScheduleEdge>(); var start = new StartVertex(1); var end = new EndVertex(2); var vertex1 = new SubScheduleVertex(3, subScheduleId); graph.AddVertex(start); graph.AddVertex(end); graph.AddVertex(vertex1); graph.AddEdge(new ScheduleEdge(start, vertex1)); graph.AddEdge(new ScheduleEdge(vertex1, end)); schedule = new Schedule(graph, start, end); errorVertex = vertex1; } var knownSchedules = new Mock <IStoreSchedules>(); { knownSchedules.Setup(s => s.Contains(It.IsAny <ScheduleId>())) .Returns <ScheduleId>(scheduleId => subScheduleId.Equals(scheduleId) || subSubScheduleId.Equals(scheduleId)); knownSchedules.Setup(s => s.Schedule(It.IsAny <ScheduleId>())) .Returns <ScheduleId>( scheduleId => { return(subSubScheduleId.Equals(scheduleId) ? subSubSchedule : subSchedule); }); } var failures = new List <Tuple <ScheduleIntegrityFailureType, IScheduleVertex> >(); var verifier = new ScheduleVerifier(knownSchedules.Object); var result = verifier.IsValid( id, schedule, (f, v) => failures.Add(new Tuple <ScheduleIntegrityFailureType, IScheduleVertex>(f, v))); Assert.IsFalse(result); Assert.AreEqual(1, failures.Count); Assert.AreEqual(ScheduleIntegrityFailureType.SubScheduleLinksBackToParentSchedule, failures[0].Item1); Assert.AreSame(errorVertex, failures[0].Item2); }
private static Schedule BuildSchedule( ScheduleElementId action1, ScheduleElementId action2, ScheduleId scheduleId, ScheduleElementId exitCondition, ScheduleElementId passThroughCondition) { var variable = new Mock <IScheduleVariable>(); // Making a schedule that looks like: // start --> node1 -----------------------> node2 -> end // ^ | // |-- node5 <-- node4 <-- node3<-| // ^ | // node7--| |-> node6 // ^ | // |--------------| Schedule schedule = null; { var graph = new BidirectionalGraph <IScheduleVertex, ScheduleEdge>(); var start = new StartVertex(1); graph.AddVertex(start); var end = new EndVertex(2); graph.AddVertex(end); var vertex1 = new ExecutingActionVertex(3, action1); graph.AddVertex(vertex1); var vertex2 = new ExecutingActionVertex(4, action2); graph.AddVertex(vertex2); var vertex3 = new SynchronizationStartVertex(5, new IScheduleVariable[] { variable.Object }); graph.AddVertex(vertex3); var vertex4 = new ExecutingActionVertex(6, action2); graph.AddVertex(vertex4); var vertex5 = new SynchronizationEndVertex(7); graph.AddVertex(vertex5); var vertex6 = new SubScheduleVertex(8, scheduleId); graph.AddVertex(vertex6); var vertex7 = new InsertVertex(9); graph.AddVertex(vertex7); graph.AddEdge(new ScheduleEdge(start, vertex1)); graph.AddEdge(new ScheduleEdge(vertex1, vertex2)); graph.AddEdge(new ScheduleEdge(vertex2, end, exitCondition)); graph.AddEdge(new ScheduleEdge(vertex2, vertex3)); graph.AddEdge(new ScheduleEdge(vertex3, vertex4)); graph.AddEdge(new ScheduleEdge(vertex4, vertex5, passThroughCondition)); graph.AddEdge(new ScheduleEdge(vertex4, vertex6)); graph.AddEdge(new ScheduleEdge(vertex5, vertex1)); graph.AddEdge(new ScheduleEdge(vertex6, vertex7)); graph.AddEdge(new ScheduleEdge(vertex7, vertex4)); schedule = new Schedule(graph, start, end); } return(schedule); }