public void TestBifurcatingTransition()
        {
            var m = new Marking(3,
                new Dictionary<int, int>
                    {
                        { (int)Places.p1, 0 },
                        { (int)Places.p2, 0 },
                        { (int)Places.p3, 0 }
                    });
            var p = CreatePetriNet.Parse(StdPetriNets.Bifurcation).CreateNet<GraphPetriNet>();

            m.Assert(p.Places, new Dictionary<string, int>{
                { "p1", 0 }, { "p2", 0 }, { "p3", 0 } });

            m.Set(p.Places, "p1", 1);
            m.Assert(p.Places, new Dictionary<string, int>{
                { "p1", 1 }, { "p2", 0 }, { "p3", 0 } });

            m = p.Fire(m);
            m.Assert(p.Places, new Dictionary<string, int>{
                { "p1", 0 }, { "p2", 1 }, { "p3", 1 } });
        }
 public void TestSelfTransition()
 {
     var m = new Marking(1, new Dictionary<int, int>
             {
                 { (int)Places.p1, 0 }
             });
     var p = CreatePetriNet.Parse(StdPetriNets.SelfTransition).CreateNet<GraphPetriNet>();
     m.Set(p.Places, "p1", 1);
     Assert.AreEqual(1, m.Get(p.Places,"p1"));
     m = p.Fire(m);
     Assert.AreEqual(1, m.Get(p.Places, "p1"));
 }
        public void TestMultiEnabledPetriNet()
        {
            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 = CreatePetriNet.Parse(StdPetriNets.MultiEnabled).CreateNet<GraphPetriNet>();
            m.Assert(p.Places, new Dictionary<string, int>
                    {{ "p1", 0 }, { "p2", 0 },
                     { "p3", 0 }, { "p4", 0 } });

            m.Set(p.Places, "p1", 1);
            m.Assert(p.Places, new Dictionary<string, int>
                    {{ "p1", 1 }, { "p2", 0 },
                     { "p3", 0 }, { "p4", 0 } });

            m = p.Fire(m);
            m.Assert(p.Places, new Dictionary<string, int>
                    {{ "p1", 0 }, { "p2", 1 },
                     { "p3", 0 }, { "p4", 0 } });

            m = p.Fire(m);
            m.Assert(p.Places, new Dictionary<string, int>
                    {{ "p1", 0 }, { "p2", 0 },
                     { "p3", 1 }, { "p4", 0 } });

            m.Set(p.Places, "p4", 1);
            m.Assert(p.Places, new Dictionary<string, int>
                    {{ "p1", 0 }, { "p2", 0 },
                     { "p3", 1 }, { "p4", 1 } });

            m = p.Fire(m);
            m.Assert(p.Places, new Dictionary<string, int>
                    {{ "p1", 0 }, { "p2", 1 },
                     { "p3", 1 }, { "p4", 0 } });

            m = p.Fire(m);
            m.Assert(p.Places, new Dictionary<string, int>
                    {{ "p1", 0 }, { "p2", 0 },
                     { "p3", 2 }, { "p4", 0 } });
        }