private Fsm.State AssertOriginalFsm(Fsm.FiniteStateMachine fsm, ISynchronizationContext context) { Assert.AreSame(fsm, this.fsm); Assert.AreEqual(3, fsm.States.Count); Assert.AreEqual(4, fsm.Transitions.Count); var s1 = fsm.States.Where(s => s.IsStartState).FirstOrDefault(); var s2 = fsm.States.Where(s => !s.IsStartState && !s.IsEndState).FirstOrDefault(); var s3 = fsm.States.Where(s => s.IsEndState); Assert.IsNotNull(s1); Assert.IsNotNull(s2); Assert.IsNotNull(s3); var t1 = s1.Transitions.FirstOrDefault(t => t.Input == "a"); var t2 = s2.Transitions.FirstOrDefault(t => t.Input == "a"); var t3 = s2.Transitions.FirstOrDefault(t => t.Input == "b"); var t4 = s1.Transitions.FirstOrDefault(t => t.Input == "b"); Assert.IsNotNull(t1); Assert.IsNotNull(t2); Assert.IsNotNull(t3); Assert.IsNotNull(t4); return s1; }
private Fsm.State AssertJoinedFsm(Fsm.FiniteStateMachine fsm, ISynchronizationContext context) { Assert.AreSame(fsm, this.fsm); Assert.AreEqual(4, fsm.States.Count); Assert.AreEqual(5, fsm.Transitions.Count); var s1 = fsm.States.FirstOrDefault(s => s.Name == "s1"); var s2 = fsm.States.FirstOrDefault(s => s.Name == "s2"); var s3 = fsm.States.FirstOrDefault(s => s.Name == "s3"); var s4 = fsm.States.FirstOrDefault(s => s.Name == "s4"); Assert.IsNotNull(s1); Assert.IsNotNull(s2); Assert.IsNotNull(s3); Assert.IsNotNull(s4); return s1; }
private Fsm.State AssertEmptyFsm(Fsm.FiniteStateMachine fsm) { Assert.AreSame(fsm, this.fsm); Assert.AreEqual(0, fsm.States.Count); Assert.AreEqual(0, fsm.Transitions.Count); return null; }
private Pn.Place AssertOriginalPetriNet(Pn.PetriNet pn, ISynchronizationContext context, Fsm.State s1) { Assert.AreSame(pn, this.pn); Assert.AreEqual(3, pn.Places.Count); Assert.AreEqual(2, pn.Transitions.Count); var place = pn.Places.FirstOrDefault(p => p.Id == "s1"); Assert.IsNotNull(place); Assert.AreEqual(2, place.Outgoing.Count); Assert.AreEqual(0, place.Incoming.Count); if (s1 != null) { Assert.AreSame(place, context.Trace.ResolveIn(fsm2pn.SynchronizationRule<FSM2PN.StateToPlace>().LeftToRight, s1)); } return place; }
private Pn.Place AssertFsmLikePetriNet(Pn.PetriNet pn, ISynchronizationContext context, Fsm.State s1) { Assert.AreSame(pn, this.pn); Assert.AreEqual(3, pn.Places.Count); Assert.AreEqual(5, pn.Transitions.Count); var s1Place = context.Trace.ResolveIn(fsm2pn.SynchronizationRule<FSM2PN.StateToPlace>().LeftToRight, s1); Assert.IsNotNull(s1Place); Assert.AreEqual(2, s1Place.Outgoing.Count); Assert.AreEqual(2, s1Place.Incoming.Count); Assert.AreEqual("s1", s1Place.Id); return s1Place; }
private void AssertOneWayUpdatesPetriNetToFsm(Pn.Place p1, Fsm.State p1State) { if (p1 == null) return; p1.Id = "foo2"; Assert.AreEqual("foo2", p1State.Name); Assert.IsFalse(p1State.IsEndState); var t = new Pn.Transition(); t.From.Add(p1); pn.Transitions.Add(t); Assert.IsTrue(p1State.IsEndState); }
private void AssertOneWayUpdatesFsmToPetriNet(Fsm.State s1, Pn.Place s1Place) { if (s1 == null) return; s1.Name = "foo1"; Assert.AreEqual("foo1", s1Place.Id); var oldTransitions = pn.Transitions.Count; s1.IsEndState = true; Assert.AreEqual(oldTransitions + 1, pn.Transitions.Count); Assert.IsTrue(s1Place.Outgoing.Any(t => t.To.Count == 0)); s1.IsEndState = false; Assert.AreEqual(oldTransitions, pn.Transitions.Count); Assert.IsFalse(s1Place.Outgoing.Any(t => t.To.Count == 0)); }