Ejemplo n.º 1
0
 def visitExprAlways(self, ctx):
     child = self.visit(ctx.expression())
     if ctx.interval() == None:
         node = Always(child)
         horizon = child.horizon
     else:
         interval = self.visit(ctx.interval())
         node = TimedAlways(child, interval.begin, interval.end)
         horizon = child.horizon + interval.end
     node.horizon = horizon
     return node
Ejemplo n.º 2
0
 def visitExprUnless(self, ctx):
     child1 = self.visit(ctx.expression(0))
     child2 = self.visit(ctx.expression(1))
     interval = self.visit(ctx.interval())
     if ctx.interval() == None:
         left = Always(child1)
         right = Until(child1, child2)
         node = Disjunction(left, right)
         node.horizon = max(child1.horizon, child2.horizon)
     else:
         left = TimedAlways(child1, 0, interval.end)
         right = TimedUntil(child1, child2, interval.begin, interval.end)
         node = Disjunction(left, right)
         node.horizon = max(child1.horizon, child2.horizon) + interval.end
     return node
Ejemplo n.º 3
0
    def test_complex_mixed_2(self):
        var_node_1 = Variable('req', '', 'output')
        var_node_2 = Variable('gnt', '', 'output')

        ev_node = TimedEventually(var_node_1, 5, 6)
        once_node = TimedOnce(var_node_2, 1, 2)
        alw_node = TimedAlways(once_node, 3, 3)
        add_node = Implies(ev_node, alw_node)
        add_node.horizon = 6

        pastifier = STLPastifier()
        add_node.accept(pastifier)
        new_node = pastifier.pastify(add_node)

        self.assertEqual('(once[0,1](req))->(once[1,2](once[3,3](gnt)))', new_node.name, 'Complex pastification assertion')
Ejemplo n.º 4
0
    def test_complex_bounded_future_1(self):
        var_node_1 = Variable('req', '', 'output')
        var_node_2 = Variable('gnt', '', 'output')
        cnt_node_1 = Constant(3)
        cnt_node_2 = Constant(3)
        pd_node_1 = Predicate(var_node_1, cnt_node_1, StlComparisonOperator.GEQ)
        pd_node_2 = Predicate(var_node_2, cnt_node_2, StlComparisonOperator.GEQ)
        rise_node = Rise(pd_node_1)
        hist_node = TimedAlways(pd_node_2, 3, 4)
        once_node = TimedEventually(hist_node, 1, 2)
        add_node = Implies(rise_node, once_node)
        add_node.horizon = 6

        pastifier = STLPastifier()
        add_node.accept(pastifier)
        new_node = pastifier.pastify(add_node)

        self.assertEqual('(rise((once[6,6](req))>=(3)))->(once[0,1](historically[0,1]((gnt)>=(3))))', new_node.name, 'Complex pastification assertion')
Ejemplo n.º 5
0
    def test_always_0_1(self):
        var_node = Variable('req', '', 'output')
        node = TimedAlways(var_node, 0, 1)

        pastifier = STLPastifier()
        node.accept(pastifier)
        new_node = pastifier.pastify(node)

        self.assertEqual('historically[0,1](req)', new_node.name, 'Always pastification assertion')

        node.horizon = 5

        pastifier = STLPastifier()
        node.accept(pastifier)
        new_node = pastifier.pastify(node)

        self.assertEqual('historically[0,1](once[4,4](req))', new_node.name, 'Always pastification assertion')