Example #1
0
        public void ParallelSiblingsTest()
        {
            FHFSM machine = new FHFSM(null);

            FDummyState s1 = new FDummyState("s1");

            FParallelState s11 = new FParallelState("s11", s1);
            FParallelState s12 = new FParallelState("s12", s1);

            FDummyState s111 = new FDummyState("s111", s11);
            FDummyState s112 = new FDummyState("s112", s11);

            s11.SetInitialState(s111);

            FDummyState s121 = new FDummyState("s121", s12);
            FDummyState s122 = new FDummyState("s122", s12);

            s12.SetInitialState(s121);

            FDummyState s2 = new FDummyState("s2");

            s2.AddTransition("GoToS111", s111);
            s111.AddTransition("GoToS121", s121);

            s122.AddTransition("GoToS112", s112);
            s112.AddTransition("GoToS11", s2);

            machine.AddState(s1);
            machine.AddState(s2);

            machine.SetInitialState(s2);

            machine.Start();

            Assert.IsTrue(machine.ActiveStates.Count == 1);
            Assert.IsTrue(machine.ActiveStates.Contains(s2));

            machine.PushTrigger("GoToS111");

            Assert.IsTrue(machine.ActiveStates.Count == 4);
            Assert.IsTrue(machine.ActiveStates.Contains(s1));
            Assert.IsTrue(machine.ActiveStates.Contains(s11));
            Assert.IsTrue(machine.ActiveStates.Contains(s111));
            Assert.IsTrue(machine.ActiveStates.Contains(s112));

            machine.PushTrigger("GoToS121");

            Assert.IsTrue(machine.ActiveStates.Count == 4);
            Assert.IsTrue(machine.ActiveStates.Contains(s1));
            Assert.IsTrue(machine.ActiveStates.Contains(s12));
            Assert.IsTrue(machine.ActiveStates.Contains(s121));
            Assert.IsTrue(machine.ActiveStates.Contains(s122));

            machine.PushTrigger("GoToS112");

            Assert.IsTrue(machine.ActiveStates.Count == 4);
            Assert.IsTrue(machine.ActiveStates.Contains(s1));
            Assert.IsTrue(machine.ActiveStates.Contains(s11));
            Assert.IsTrue(machine.ActiveStates.Contains(s111));
            Assert.IsTrue(machine.ActiveStates.Contains(s112));

            machine.PushTrigger("GoToS11");
            Assert.IsTrue(machine.ActiveStates.Count == 1);
            Assert.IsTrue(machine.ActiveStates.Contains(s2));
        }