public void TestNameIsInitialised()
        {
            var pn = CreatePetriNet.Called("p1");

            Assert.IsTrue(!string.IsNullOrWhiteSpace(pn.Name));
            Assert.AreEqual("p1", pn.Name);
        }
        public void TestFullMontySetup()
        {
            var pnb = CreatePetriNet
                      .Called("net")
                      .WithPlaces("p1", "p2", "p3")
                      .AndTransitions("t1", "t2", "t3")
                      .With("t1").FedBy("p1", "p2")
                      .And().With("t2").FedBy("p3").AsInhibitor()
                      .And().With("t1").Feeding("p2")
                      .And().With("t2").Feeding("p1")
                      .And().WhenFiring("t1")
                      .Run(x => Console.WriteLine("Fired"))
                      .Run(x => Console.WriteLine("Fired"))
                      .Run(x => Console.WriteLine("Fired"))
                      .And().WhenFiring("t2")
                      .Run(x => Console.WriteLine("Fired"))
                      .Run(x => Console.WriteLine("Fired"))
                      .Run(x => Console.WriteLine("Fired"))
                      .Complete()
            ;
            var pn = pnb.CreateNet <GraphPetriNet>();

            Assert.IsNotNull(pn);
            var m = pnb.CreateMarking();
        }
        public void TestBifurcatingTransition() // a bifurcating transition
        {
            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 TestNameCannotBeInitdWithJunk1()
        {
            var pn = CreatePetriNet.Called("");

            Assert.IsTrue(!string.IsNullOrWhiteSpace(pn.Name));
            Assert.AreEqual("", pn.Name);
        }
Пример #5
0
        public void TestMarkingNotation(string spec, string serialisedMarking)
        {
            CreatePetriNet pnb = CreatePetriNet.Parse(spec);
            var            m   = pnb.CreateMarking();

            Assert.AreEqual(serialisedMarking, m.ToString());
        }
Пример #6
0
 public PetriNetConnectionBuilder(CreatePetriNet builder,
                                  string transition)
 {
     Builder = builder;
     TransitionName = transition;
     _weight = 1;
 }
Пример #7
0
 public PetriNetConnectionBuilder(CreatePetriNet builder,
                                  string transition)
 {
     Builder        = builder;
     TransitionName = transition;
     _weight        = 1;
 }
        public void TestCompareArcLangWithFluentLang()
        {
            var pnc = CreatePetriNet.Called("p")
                      .WithPlaces("p1",
                                  "p2",
                                  "p3")
                      .AndTransitions("t1")
                      .With("t1").FedBy("p1")
                      .And().With("t1").Feeding("p2",
                                                "p3")
                      .Done();
            var            pn1  = pnc.CreateNet <GraphPetriNet>();
            var            spec = @" PetriNet net; Graph p1)-[t1; t1]-({p2,p3}; End ";
            CreatePetriNet pnc2 = CreatePetriNet.Parse(spec);
            var            pn2  = pnc2.CreateNet <GraphPetriNet>();
            var            m    = pnc2.CreateMarking();

            m[pnc2.PlaceIndex("p1")] = 1;

            var m1 = pn1.Fire(m);
            var m2 = pn2.Fire(m);

            Assert.AreEqual(0, m1[pnc.PlaceIndex("p1")]);
            Assert.AreEqual(1, m1[pnc.PlaceIndex("p2")]);
            Assert.AreEqual(1, m1[pnc.PlaceIndex("p3")]);

            Assert.AreEqual(0, m2[pnc2.PlaceIndex("p1")]);
            Assert.AreEqual(1, m2[pnc2.PlaceIndex("p2")]);
            Assert.AreEqual(1, m2[pnc2.PlaceIndex("p3")]);
        }
Пример #9
0
        private void RunFullTestCase(string spec,
                                     int inArcs,
                                     int outArcs,
                                     int numInhibitors)
        {
            CreatePetriNet pnb = CreatePetriNet.Parse(spec);

            if (inArcs == 0)
            {
                Assert.That(pnb.InArcs, Is.Null);
            }
            else
            {
                Assert.That(pnb.InArcs.SelectMany(x => x.Value).Count(), Is.EqualTo(inArcs));
                Assert.That(pnb.InArcs.SelectMany(x => x.Value).Where(x => x.IsInhibitor).Count(), Is.EqualTo(numInhibitors));
            }

            if (outArcs == 0)
            {
                Assert.That(pnb.OutArcs, Is.Null);
            }
            else
            {
                Assert.That(pnb.OutArcs.SelectMany(x => x.Value).Count(), Is.EqualTo(outArcs));
            }
        }
 public void TestCalltransitionsTwiceOutOfOrder()
 {
     var pn = CreatePetriNet
              .Called("net")
              .WithTransitions("p1")
              .WithPlaces("p1")
              .WithTransitions("p1");
 }
        public void TestCreatePlaces()
        {
            var pn = CreatePetriNet.Called("net").WithPlaces("p1", "p2", "p3");

            Assert.IsNotNull(pn.Places);
            Assert.IsTrue(pn.Places.Count == 3);
            Assert.AreEqual(pn.Places[0], "p1");
            Assert.AreEqual(pn.Places[1], "p2");
            Assert.AreEqual(pn.Places[2], "p3");
        }
        public void TestMarkingTransitionEnabled()
        {
            var m = new Marking(2, new Dictionary <int, int> {
                { 0, 0 }, { 1, 0 }
            });
            var p = CreatePetriNet.Parse(StdPetriNets.OneInOneOut).CreateNet <GraphPetriNet>();

            m[0] = 1;
            Assert.AreEqual(true, p.IsEnabled(0, m));
        }
 public void TestCreateGraphWithIllegalMarking3()
 {
     var pnb = CreatePetriNet.Called("blah")
               .WithPlaces("p1", "p2")
               .AndTransitions("t1")
               .With("t1").FedBy("p1")
               .And().With("t1").Feeding("p1")
               .And().WithPlace(null).HavingMarking(1)
               .And().WithPlace("p2").HavingMarking(2)
               .Done();
 }
        public void TestMarkingAffectsEnablement()
        {
            var m = new Marking(2, new Dictionary <int, int> {
                { 0, 1 }, { 1, 1 }
            });
            var p = CreatePetriNet.Parse(StdPetriNets.TwoInOneOut).CreateNet <GraphPetriNet>();

            Assert.AreEqual(true, p.IsEnabled(0, m));
            m[0] = 0;
            Assert.AreEqual(false, p.IsEnabled(0, m));
        }
        public void TestDoubleSelfTransition()
        {
            var m = new Marking(1,
                                new Dictionary <int, int>
            {
                { (int)Places.p1, 1 }
            });
            var p = CreatePetriNet.Parse(StdPetriNets.DoubleSelfTransition).CreateNet <GraphPetriNet>();

            Assert.AreEqual(1, m.Get(p.Places, "p1"));
            m = p.Fire(m);
            Assert.AreEqual(1, m.Get(p.Places, "p1"));
        }
        public void TestFireCreatesModifiedMarking()
        {
            var m = new Marking(2,
                                new Dictionary <int, int> {
                { 0, 1 }, { 1, 0 }
            });
            var p = CreatePetriNet.Parse(StdPetriNets.OneInOneOut).CreateNet <GraphPetriNet>();

            Assert.AreEqual(1, m[0]);
            Assert.AreEqual(0, m[1]);
            Assert.AreEqual(true, p.IsEnabled(0, m));
            m = p.Fire(m);
            Assert.AreEqual(0, m[0]);
            Assert.AreEqual(1, m[1]);
        }
        public void TestCreateMarking()
        {
            var pnb = CreatePetriNet.Called("blah")
                      .WithPlaces("p1", "p2")
                      .AndTransitions("t1")
                      .With("t1").FedBy("p1")
                      .And().With("t1").Feeding("p1")
                      .And().WithPlace("p1").HavingMarking(1)
                      .And().WithPlace("p2").HavingMarking(2)
                      .Done();
            var m = pnb.CreateMarking();

            Assert.AreEqual(2, m.Count);
            Assert.AreEqual(1, m[pnb.PlaceIndex("p1")]);
            Assert.AreEqual(2, m[pnb.PlaceIndex("p2")]);
        }
        public void TestCreateGraphWithNonDefaultCapacities()
        {
            var pnb = CreatePetriNet.Called("blah")
                      .WithPlaces("p1", "p2")
                      .AndTransitions("t1")
                      .With("t1").FedBy("p1")
                      .And().With("t1").Feeding("p1")
                      .And().WithPlace("p1").HavingCapacity(2)
                      .And().WithPlace("p2").HavingCapacity(3)
                      .Done();
            var pn = pnb.CreateNet <GraphPetriNet>();

            Assert.AreEqual(2, pn.PlaceCapacities.Count);
            Assert.AreEqual(2, pn.PlaceCapacities[pnb.PlaceIndex("p1")]);
            Assert.AreEqual(3, pn.PlaceCapacities[pnb.PlaceIndex("p2")]);
        }
        public void TestFireCreatesModifiedMarking2()
        {
            var m = new Marking(3,
                                new Dictionary <int, int> {
                { 0, 1 }, { 1, 0 }, { 2, 0 }
            });
            var p = CreatePetriNet.Parse(StdPetriNets.TwoInOneOut).CreateNet <GraphPetriNet>();

            Assert.IsFalse(p.IsEnabled(0, m));
            m[1] = 1;
            Assert.IsTrue(p.IsEnabled(0, m));
            m = p.Fire(m);
            Assert.AreEqual(0, m[0]);
            Assert.AreEqual(0, m[1]);
            Assert.AreEqual(1, m[2]);
        }
Пример #20
0
    void PetriNetSpec()
    {
        Expect(3);
        Expect(2);
        Builder = CreatePetriNet.Called(t.val);

        Expect(15);
        ArcSetSpec();
        while (la.kind == 2 || la.kind == 12)
        {
            ArcSetSpec();
        }
        Expect(16);
        while (la.kind == 2)
        {
            MarkingSpec();
        }
    }
        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 }
            });
        }
        public void TestCreatePetriNetBuilder()
        {
            var pn = CreatePetriNet.Called("p1");

            Assert.IsNotNull(pn);
        }
 public void TestCreateTransitionsWithBadNames4()
 {
     var pn = CreatePetriNet
              .Called("net")
              .WithPlaces("p1", "p2", "p3").WithTransitions("p1", null, "p2");
 }
        public void TestCompareWithOldConstructionTechnique()
        {
            var m = new Marking(3,
                                new Dictionary <int, int>
            {
                { (int)Places.p1, 0 },
                { (int)Places.p2, 0 },
                { (int)Places.p3, 0 }
            });
            var p = new GraphPetriNet("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)
                  } }
            });

            var pnc = CreatePetriNet.Called("p")
                      .WithPlaces("p1",
                                  "p2",
                                  "p3")
                      .AndTransitions("t1")
                      .With("t1").FedBy("p1")
                      .And().With("t1").Feeding("p2",
                                                "p3")
                      .Done();
            var p2 = pnc.CreateNet <GraphPetriNet>();

            m[(int)Places.p1] = 1;

            var m2 = p.Fire(m);
            var m3 = p2.Fire(m);

            AssertMarkings(m2, new Dictionary <int, double> {
                { (int)Places.p1, 0 },
                { (int)Places.p2, 1 },
                { (int)Places.p3, 1 }
            });
            AssertMarkings(m3, new Dictionary <int, double> {
                { (int)Places.p1, 0 },
                { (int)Places.p2, 1 },
                { (int)Places.p3, 1 }
            });
        }
 public void TestNameCannotBeInitdWithJunk2()
 {
     var pn = CreatePetriNet.Called("\0");
 }
 public void TestCreateWithBadNames2()
 {
     var pn = CreatePetriNet.Called("net").WithPlaces(null);
 }
 public void TestCreateWithBadNames5()
 {
     var pn = CreatePetriNet.Called("net").WithPlaces("p1", "\0", "p2");
 }