Fire() public method

public Fire ( Marking m ) : Marking
m Marking
return Marking
示例#1
0
        public void Test2to1EnablementAndFiring()
        {
            var m = new Marking(3,
                new Dictionary<int, int> { { 0, 1 }, { 1, 0 }, { 2, 0 } });
            var p = new MatrixPetriNet("p",
                new Dictionary<int, string> {
                    {0, "p0"},
                    {1, "p1"},
                    {2, "p2"}
                },
                new Dictionary<int, string> { { 0, "t0" } },
                new Dictionary<int, List<InArc>>{
                    {0, new List<InArc>(){new InArc(0),new InArc(2)}}
                },
                new Dictionary<int, List<OutArc>>{
                    {0, new List<OutArc>(){new OutArc(1)}}
                });

            Assert.AreEqual(false, p.IsEnabled(0, m));
            m[2] = 1;
            Assert.AreEqual(true, p.IsEnabled(0, m));
            m = p.Fire(m);
            Assert.AreEqual(0, m[0]);
            Assert.AreEqual(1, m[1]);
            Assert.AreEqual(0, m[2]);
        }
示例#2
0
        public void Test1to1Fire()
        {
            var m = new Marking(2, new Dictionary<int, int> { { 0, 1 }, { 1, 0 } });
            var p = new MatrixPetriNet("p",
                new Dictionary<int, string> {
                    {0, "p0"},
                    {1, "p1"}
                },
                new Dictionary<int, string> { { 0, "t0" } },
                new Dictionary<int, List<InArc>>(){
                    {0, new List<InArc>(){new InArc(0)}}
                },
                new Dictionary<int, List<OutArc>>(){
                    {0, new List<OutArc>(){new OutArc(1)}}
                });

            Assert.AreEqual(true, p.IsEnabled(0, m));
            m = p.Fire(m);
            Assert.AreEqual(0, m[0]);
            Assert.AreEqual(1, m[1]);
        }
示例#3
0
 public void TestTransitionFunctionExecution()
 {
     var m = new Marking(2, new Dictionary<int, int>
             {
                 { 0, 2 } ,
                 { 1, 0 }
             });
     var p = new MatrixPetriNet("p",
         new Dictionary<int, string> {
             {0, "p0"},
             {1, "p1"}
         },
         new Dictionary<int, string>
             {
                 { 0, "t0" }
             },
         new Dictionary<int, List<InArc>>(){
             {0, new List<InArc>(){new InArc(0)}}
         },
         new Dictionary<int, List<OutArc>>(){
             {0, new List<OutArc>(){new OutArc(1)}}
         });
     Assert.AreEqual(2, m[0]);
     var someLocal = 0;
     m[0] = 1;
     p.RegisterFunction(0, (t) => someLocal += 1);
     m = p.Fire(m);
     Assert.AreEqual(1, someLocal);
 }
示例#4
0
 public void TestSelfTransition()
 {
     var m = new Marking(1,
         new Dictionary<int, int>
             {
                 { (int)Places.p1, 0 }
             });
     var p = new MatrixPetriNet("p",
         new Dictionary<int, string> {
             {(int)Places.p1, "p1"}
         },
         new Dictionary<int, string>
             {
                 { (int)Transitions.t1, "t1" }
             },
         new Dictionary<int, List<InArc>>(){
             {(int)Transitions.t1, new List<InArc>(){new InArc((int)Places.p1)}}
         },
         new Dictionary<int, List<OutArc>>(){
             {(int)Transitions.t1, new List<OutArc>(){new OutArc((int)Places.p1)}}
         });
     m[(int)Places.p1] = 1;
     Assert.AreEqual(1, m[(int)Places.p1]);
     m = p.Fire(m);
     Assert.AreEqual(1, m[(int)Places.p1]);
 }
示例#5
0
        public void TestMarkingFlowInComplexNet()
        {
            var m = new Marking(4,
                new Dictionary<int, int>
                    {
                        { (int)Places.p1, 0 },
                        { (int)Places.p2, 0 },
                        { (int)Places.p3, 0 },
                        { (int)Places.p4, 0 }
                    });
            var p = new MatrixPetriNet("p",
                new Dictionary<int, string> {
                    {(int)Places.p1, "p1"},
                    {(int)Places.p2, "p2"},
                    {(int)Places.p3, "p3"},
                    {(int)Places.p4, "p4"}
                },
                new Dictionary<int, string>
                    {
                        { (int)Transitions.t1, "t1" },
                        { (int)Transitions.t2, "t2" },
                        { (int)Transitions.t3, "t3" }
                    },
                new Dictionary<int, List<InArc>>(){
                    {(int)Transitions.t1, new List<InArc>(){new InArc((int)Places.p1)}},
                    {(int)Transitions.t2, new List<InArc>(){new InArc((int)Places.p2)}},
                    {(int)Transitions.t3, new List<InArc>(){new InArc((int)Places.p4)}}
                },
                new Dictionary<int, List<OutArc>>(){
                    {(int)Transitions.t1, new List<OutArc>(){new OutArc((int)Places.p2)}},
                    {(int)Transitions.t2, new List<OutArc>(){new OutArc((int)Places.p3)}},
                    {(int)Transitions.t3, new List<OutArc>(){new OutArc((int)Places.p2)}}
                });

            /*
             * This model is a petri net in this shape
             *
             * P1 --> T1 --> P2 --> T2 --> P3
             *                ^
             *                |
             *                T3
             *                ^
             *                |
             *                P4
             * */
            AssertMarkings(m, new Dictionary<Places, double>{
                { Places.p1, 0 },
                { Places.p2, 0 },
                { Places.p3, 0 },
                { Places.p4, 0 } });

            m[(int)Places.p1] = 1;
            AssertMarkings(m, new Dictionary<Places, double>{
                { Places.p1, 1 },
                { Places.p2, 0 },
                { Places.p3, 0 },
                { Places.p4, 0 } });

            m = p.Fire(m);
            AssertMarkings(m, new Dictionary<Places, double>{
                { Places.p1, 0 },
                { Places.p2, 1 },
                { Places.p3, 0 },
                { Places.p4, 0 } });

            m = p.Fire(m);
            AssertMarkings(m, new Dictionary<Places, double>{
                { Places.p1, 0 },
                { Places.p2, 0 },
                { Places.p3, 1 },
                { Places.p4, 0 } });

            m[(int)Places.p4] = 1;
            AssertMarkings(m, new Dictionary<Places, double>{
                { Places.p1, 0 },
                { Places.p2, 0 },
                { Places.p3, 1 },
                { Places.p4, 1 } });

            m = p.Fire(m);
            AssertMarkings(m, new Dictionary<Places, double>{
                { Places.p1, 0 },
                { Places.p2, 1 },
                { Places.p3, 1 },
                { Places.p4, 0 } });

            m = p.Fire(m);
            AssertMarkings(m, new Dictionary<Places, double>{
                { Places.p1, 0 },
                { Places.p2, 0 },
                { Places.p3, 2 },
                { Places.p4, 0 } });
        }
示例#6
0
        public void TestMarkingFlowInBifurcatedTransition()
        {
            var m = new Marking(3);
            var p = new MatrixPetriNet("p",
                new Dictionary<int, string> {
                    {(int)Places.p1, "p1"},
                    {(int)Places.p2, "p2"},
                    {(int)Places.p3, "p3"}
                },
                new Dictionary<int, string>
                    {
                        { (int)Transitions.t1, "t1" }
                    },
                new Dictionary<int, List<InArc>>(){
                    {(int)Transitions.t1, new List<InArc>(){new InArc((int)Places.p1)}}
                },
                new Dictionary<int, List<OutArc>>(){
                    {(int)Transitions.t1, new List<OutArc>(){new OutArc((int)Places.p2),
                                                             new OutArc((int)Places.p3)}}
                });

            AssertMarkings(m, new Dictionary<Places, double>{
                { Places.p1, 0 },
                { Places.p2, 0 },
                { Places.p3, 0 } });

            m[(int)Places.p1] = 1;
            AssertMarkings(m, new Dictionary<Places, double>{
                { Places.p1, 1 },
                { Places.p2, 0 },
                { Places.p3, 0 } });

            m = p.Fire(m);
            AssertMarkings(m, new Dictionary<Places, double>{
                { Places.p1, 0 },
                { Places.p2, 1 },
                { Places.p3, 1 } });
        }
示例#7
0
 public void TestInputTransition()
 {
     var m = new Marking(1, new Dictionary<int, int>
             {
                 { 0, 0 }
             });
     var p = new MatrixPetriNet("p",
         new Dictionary<int, string> {
             {0, "p0"}
         },
         new Dictionary<int, string>
             {
                 { 0, "Ti" }
             },
         new Dictionary<int, List<InArc>>() { },
         new Dictionary<int, List<OutArc>>(){
             {0, new List<OutArc>(){new OutArc(0)}}
         });
     Assert.AreEqual(0, m[0]);
     Assert.IsTrue(p.IsEnabled(0, m));
     m = p.Fire(m);
     Assert.AreEqual(1, m[0]);
     Assert.IsTrue(p.IsEnabled(0, m));
     m = p.Fire(m);
     Assert.AreEqual(2, m[0]);
     Assert.IsTrue(p.IsEnabled(0, m));
 }
示例#8
0
        public void TestDrainTransition()
        {
            var m = new Marking(1, new Dictionary<int, int>
                    {
                        { 0, 5 }
                    });
            var p = new MatrixPetriNet("p",
                new Dictionary<int, string> {
                    {0, "p0"}
                },
                new Dictionary<int, string>
                    {
                        { 0, "Ti" }
                    },
                new Dictionary<int, List<InArc>>() {
                    {0, new List<InArc>(){new InArc(0)}}
                },
                new Dictionary<int, List<OutArc>>() { });

            for (int i = 5; i >= 0; i--)
            {
                Assert.AreEqual(i, m[0]);
                Assert.AreEqual(i > 0, p.IsEnabled(0, m));
                m = p.Fire(m);
            }
        }