Exemple #1
0
    def test_replay_df_pn(self):
        dpn = PetriNet()
        dpn.add_transition('A')
        dpn.add_transition('B')
        dpn.add_transition('C')

        dpn.add_place(1)
        dpn.add_place(2)
        dpn.add_place(3)

        dpn.add_edge(1, -1)
        dpn.add_edge(-1, 2)

        dpn.add_edge(1, -3)
        dpn.add_edge(-3, 3)

        # dpn.add_edge(1, -2)  # deadlock
        dpn.add_edge(2, -2)
        # dpn.add_edge(3, -2)
        dpn.add_edge(-2, 3)

        dpn.add_marking(1)
        # dpn.add_marking(2, 2)
        # dpn.add_marking(3, 2)

        # start replay
        dpn.replay(5)
        self.assertListEqual(dpn.marking, [0, 0, 1])
Exemple #2
0
    def test_add_marking_df_pn(self):
        dpn = PetriNet()

        dpn.add_place(1)
        dpn.add_place(2)
        dpn.add_place(3)

        # ----------------------------------
        dpn.add_marking(3)

        self.assertListEqual(dpn.marking, [0, 0, 1])
Exemple #3
0
    def test_all_enabled_transitions(self):
        net = PetriNet()
        net.add_transition('A').add_transition('B')
        net.add_place(1).add_place(2).add_place(3).add_place(4)
        net.add_edge(1, -1).add_edge(-1, 3).add_edge(2, -1) \
         .add_edge(3, -2).add_edge(-2, 4)

        # ----------------------------------
        net.add_marking(1).add_marking(2)

        transitions = net.all_enabled_transitions()
        self.assertListEqual(transitions, [-1])
Exemple #4
0
    def test_is_enabled(self):
        net = PetriNet()
        net.add_transition('A')
        net.add_place(1).add_place(2).add_place(3)
        net.add_edge(1, -1).add_edge(-1, 3).add_edge(2, -1)

        # ----------------------------------
        self.assertFalse(net.is_enabled(-1))

        net.add_marking(1)
        self.assertFalse(net.is_enabled(-1))

        net.add_marking(2)
        self.assertTrue(net.is_enabled(-1))
Exemple #5
0
    def test_remove_place_df_pn(self):
        dpn = PetriNet()
        dpn.add_place(1)
        dpn.add_place(2)
        dpn.add_place(3)

        dpn.add_marking(3)

        # ----------------------------------
        dpn.remove_place(2)
        self.assertDictEqual(dpn.places, {0: 1, 1: 3})
        self.assertListEqual(dpn.marking, [0, 1])
        self.assertListEqual(dpn.capacity, [1, 1])

        dpn.remove_place(3)
        self.assertDictEqual(dpn.places, {0: 1})
        self.assertListEqual(dpn.marking, [0])
        self.assertListEqual(dpn.capacity, [1])
Exemple #6
0
    def test_place_capacity(self):
        net = PetriNet()
        for i in range(1, 4):
            net.add_place(i)
        net.add_transition('A')
        net.add_transition('B')
        net.add_edge(1, -1)
        net.add_edge(-1, 2)
        net.add_edge(-1, 3)
        net.add_edge(2, -2)

        net.add_marking(1, 1)
        net.add_marking(2, 4)

        net.fire_transition(-1)

        print(net.get_exceeded_places())
        net.fire_transition(-2)
        net.fire_transition(-2)
        net.fire_transition(-2)
        net.fire_transition(-2)
        print(net.get_exceeded_places())