public void Fsm2Pn_CheckOnly_SameAfterApplyAllChanges(ChangePropagationMode changePropagation) { var fsm = this.fsm; var pn = this.pn; FillStateMachine(); FillPetriNet(); fsm2pn.Initialize(); var context = fsm2pn.Synchronize(fsm2pn.SynchronizationRule <FSM2PN.AutomataToNet>(), ref fsm, ref pn, SynchronizationDirection.CheckOnly, changePropagation); var s1 = AssertOriginalFsm(fsm, context); AssertOriginalPetriNet(pn, context, null); foreach (var inconsistency in context.Inconsistencies.ToArray()) { Assert.IsTrue(inconsistency.CanResolveRight); inconsistency.ResolveRight(); } AssertFsmLikePetriNet(pn, context, s1); if (changePropagation == ChangePropagationMode.TwoWay) { Assert.AreEqual(0, context.Inconsistencies.Count); } }
private void TestFsm2Pn(SynchronizationDirection direction, ChangePropagationMode changePropagartion, bool initializeFsm, bool initializePn) { Assert.IsTrue(initializeFsm | initializePn); var fsm = this.fsm; var pn = this.pn; if (initializeFsm) { FillStateMachine(); } if (initializePn) { FillPetriNet(); } fsm2pn.Initialize(); var context = fsm2pn.Synchronize(fsm2pn.SynchronizationRule <FSM2PN.AutomataToNet>(), ref fsm, ref pn, direction, changePropagartion); var isLeftToRight = direction == SynchronizationDirection.LeftToRight || direction == SynchronizationDirection.LeftToRightForced || direction == SynchronizationDirection.LeftWins; var isForced = direction == SynchronizationDirection.LeftToRightForced || direction == SynchronizationDirection.RightToLeftForced; var isJoined = direction == SynchronizationDirection.LeftWins || direction == SynchronizationDirection.RightWins; Fsm.State s1; Pn.Place p1; if (initializeFsm && initializePn) { if (isForced) { if (isLeftToRight) { s1 = AssertOriginalFsm(fsm, context); } else { s1 = AssertPetriNetLikeFsm(fsm, context); } } else if (isJoined || !isLeftToRight) { s1 = AssertJoinedFsm(fsm, context); } else { s1 = AssertOriginalFsm(fsm, context); } } else if (!initializeFsm) { if (!isLeftToRight || isJoined) { s1 = AssertPetriNetLikeFsm(fsm, context); } else { s1 = AssertEmptyFsm(fsm); } } else if (!initializePn) { if (isForced && !isLeftToRight) { s1 = AssertEmptyFsm(fsm); } else { s1 = AssertOriginalFsm(fsm, context); } } else { s1 = null; Assert.Fail(); } if (initializeFsm && initializePn) { if (isForced) { if (!isLeftToRight) { p1 = AssertOriginalPetriNet(pn, context, s1); } else { p1 = AssertFsmLikePetriNet(pn, context, s1); } } else if (isJoined || isLeftToRight) { p1 = AssertJoinedPetriNet(pn, context, s1); } else { p1 = AssertOriginalPetriNet(pn, context, s1); } } else if (!initializePn) { if (isLeftToRight || isJoined) { p1 = AssertFsmLikePetriNet(pn, context, s1); } else { p1 = AssertEmptyPetriNet(pn); } } else if (!initializeFsm) { if (isForced && isLeftToRight) { p1 = AssertEmptyPetriNet(pn); } else { p1 = AssertOriginalPetriNet(pn, context, s1); } } else { p1 = null; Assert.Fail(); } if (changePropagartion == ChangePropagationMode.TwoWay || (changePropagartion == ChangePropagationMode.OneWay && isLeftToRight)) { AssertOneWayUpdatesFsmToPetriNet(s1, p1); } if (changePropagartion == ChangePropagationMode.TwoWay || (changePropagartion == ChangePropagationMode.OneWay && !isLeftToRight)) { AssertOneWayUpdatesPetriNetToFsm(p1, s1); } }