Exemplo n.º 1
0
    def testSimulationParallelChainPetrinet(self):
        """ Test the fireheritance: a token could wait that another token hs been fired by a transition
            on a given place to have the right to be fired
        """
        # Without fireHeritance
        pn = build_parallel_chain_petrinet(size=1, branchs=2)
        tok0 = Token(name='tok0')
        tok1 = Token(name='tok1', fire=False)
        pn.addToken(pn.getPlace('p_0_0'), tok0)
        pn.addToken(pn.getPlace('p_1_0'), tok1)

        pn.simulation(show=False)

        self.assertIn('tok1', map(lambda tok: tok.name, pn.getPlace('p_1_0').token))

        # With fireHeritance
        pn = build_parallel_chain_petrinet(size=1, branchs=2)
        tok0 = Token(name='tok0')
        tok1 = Token(name='tok1', fire=False)
        tok0.addFireHeritance('tok1', pn.getPlace('p_1_0'), pn.getTransition('t_0_0'))
        pn.addToken(pn.getPlace('p_0_0'), tok0)
        pn.addToken(pn.getPlace('p_1_0'), tok1)

        ets = pn.enabledTransitionsSet()
        self.assertIn('tok0', map(lambda tok: tok.name, pn.getPlace('p_0_0').token))
        self.assertIn('tok1', map(lambda tok: tok.name, pn.getPlace('p_1_0').token))
        self.assertFalse(tok1.fire)

        pn.oneFireSimulation(ets)
        self.assertFalse(pn.getPlace('p_0_0').token)
        self.assertIn('tok1', map(lambda tok: tok.name, pn.getPlace('p_1_0').token))
        self.assertTrue(tok1.fire)

        pn.oneFireSimulation(ets)
        self.assertFalse(pn.getPlace('p_0_0').token)
        self.assertFalse(pn.getPlace('p_1_0').token)