Beispiel #1
0
        /// <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));
        }
Beispiel #2
0
 /// <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);
        }
Beispiel #4
0
 /// <summary>
 /// Override of GetHashCode Method
 /// </summary>
 /// <returns></returns>
 public override int GetHashCode()
 {
     return(StartVertex.GetHashCode() ^ EndVertex.GetHashCode());
 }
Beispiel #5
0
 public bool Connects(Vertex <TV, TE, TF> start, Vertex <TV, TE, TF> end)
 {
     return(EndVertex.Equals(end) && StartVertex.Equals(start));
 }
Beispiel #6
0
 public override int GetHashCode() => StartVertex.GetHashCode() ^ EndVertex.GetHashCode() ^ Weight;
Beispiel #7
0
 public override string ToString()
 {
     return("{ " + StartVertex.ToString() + ", " + EndVertex.ToString() + " }");
 }
Beispiel #8
0
 /// <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()}");
 }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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);
        }