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

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

            s11.SetInitialState(s111);
            s111.AddTransition("GoToS112", s112);

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

            s12.SetInitialState(s121);
            s121.AddTransition("GoToS122", s122);

            FDummyState s2 = new FDummyState("s2");

            s1.AddTransition("GoToS2", s2);

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

            machine.SetInitialState(s1);

            machine.Start();

            Assert.IsTrue(machine.ActiveStates.Count == 5);
            Assert.IsTrue(machine.ActiveStates.Contains(s1));
            Assert.IsTrue(machine.ActiveStates.Contains(s11));
            Assert.IsTrue(machine.ActiveStates.Contains(s111));
            Assert.IsTrue(machine.ActiveStates.Contains(s12));
            Assert.IsTrue(machine.ActiveStates.Contains(s121));

            machine.PushTrigger("GoToS112");

            Assert.IsTrue(machine.ActiveStates.Count == 5);
            Assert.IsTrue(machine.ActiveStates.Contains(s1));
            Assert.IsTrue(machine.ActiveStates.Contains(s11));
            Assert.IsTrue(machine.ActiveStates.Contains(s112));
            Assert.IsTrue(machine.ActiveStates.Contains(s12));
            Assert.IsTrue(machine.ActiveStates.Contains(s121));

            machine.PushTrigger("GoToS122");

            Assert.IsTrue(machine.ActiveStates.Count == 5);
            Assert.IsTrue(machine.ActiveStates.Contains(s1));
            Assert.IsTrue(machine.ActiveStates.Contains(s11));
            Assert.IsTrue(machine.ActiveStates.Contains(s112));
            Assert.IsTrue(machine.ActiveStates.Contains(s12));
            Assert.IsTrue(machine.ActiveStates.Contains(s122));

            machine.PushTrigger("GoToS2");

            Assert.IsTrue(machine.ActiveStates.Count == 1);
            Assert.IsTrue(machine.ActiveStates[0] == s2);
        }