@Test public void createFromQueues() { // Create config [[e],[]] DistEventType sendE = DistEventType.SendEvent("e", cid1); chStates.get(0).enqueue(sendE); mc = ImmutableMultiChState.fromChannelStates(chStates); // Create config [[],[]] mc2 = ImmutableMultiChState.fromChannelIds(cids); assertTrue(mc != mc2); assertTrue(!mc.equals(mc2)); // Add e to [[],[]] at cid1 (index 0) // This should result in [[],[e]] and equal the first mc above. mc3 = mc2.getNextChState(sendE); assertTrue(mc == mc3); assertTrue(mc.equals(mc3)); assertTrue(mc.hashCode() == mc3.hashCode()); // Apply e again, resulting in: [[e,e],[]] mc4 = mc3.getNextChState(sendE); assertTrue(mc != mc4); assertTrue(mc2 != mc4); assertTrue(mc3 != mc4); // Consume e, resulting in: [[e],[]] DistEventType recvE = DistEventType.RecvEvent("e", cid1); mc4 = mc4.getNextChState(recvE); assertTrue(mc4 == mc3); // Execute a local etype at pid 0, which should not change the state DistEventType localE = DistEventType.LocalEvent("e", 1); mc4 = mc4.getNextChState(localE); assertTrue(mc4 == mc3); }
@Before public void setUp() throws Exception { super.setUp(); cids = Util.newList(2); // Two process system. cid1 = new ChannelId(0, 1, 0); cid2 = new ChannelId(1, 0, 1); cids.add(cid1); cids.add(cid2); Pmc = ImmutableMultiChState.fromChannelIds(cids); List<ObsFSMState> P = Util.newList(); ObsFSMState p0 = ObsFSMState.namedObsFSMState(0, "p", false, true); ObsFSMState p1 = ObsFSMState.namedObsFSMState(1, "q", false, true); P.add(p0); P.add(p1); obsFSMState1 = ObsMultFSMState.getMultiFSMState(P); s1 = ObsFifoSysState.getFifoSysState(obsFSMState1, Pmc); List<ObsFSMState> P2 = Util.newList(); P2.add(p0); ObsFSMState p2 = ObsFSMState.namedObsFSMState(1, "r", false, true); P2.add(p2); obsFSMState2 = ObsMultFSMState.getMultiFSMState(P2); // Get a third instance that is different from the first two. s2 = ObsFifoSysState.getFifoSysState(obsFSMState2, Pmc); e1 = DistEventType.LocalEvent("e", 0); ObsDistEventType obsE = new ObsDistEventType(e1, 0); s1.addTransition(obsE, s2); g1 = fromOneObs(2, s1); g2 = fromOneObs(2, s2); }