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 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")]); }
public void TestMarkingNotation(string spec, string serialisedMarking) { CreatePetriNet pnb = CreatePetriNet.Parse(spec); var m = pnb.CreateMarking(); Assert.AreEqual(serialisedMarking, m.ToString()); }
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 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 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 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]); }
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 } }); }