Exemple #1
0
    def test_resolve_inifitesimal_resolve_greater_minus_plus_eps(self):
        i = tctl.Interval()
        i >= (1 - eps)
        i <= 7

        exp = tctl.Interval()
        exp >= 1
        exp <= 7

        self.assertEqual(i.resolve_infinitesimal(), exp)
Exemple #2
0
    def test_resolve_inifitesimal_resolve_greater_equals_plus_eps(self):
        i = tctl.Interval()
        i >= (3 + eps)
        i <= 4

        exp = tctl.Interval()
        exp > 3
        exp <= 4

        self.assertEqual(i.resolve_infinitesimal(), exp)
Exemple #3
0
    def test_resolve_inifitesimal_resolve_lower_equals_minus_eps(self):
        i = tctl.Interval()
        i >= 2
        i <= (9 - eps)

        exp = tctl.Interval()
        exp >= 2
        exp < 9

        self.assertEqual(i.resolve_infinitesimal(), exp)
Exemple #4
0
    def test_operatorEquals_onEqualIntervals_discoversDifferentEnd(self):
        i1 = tctl.Interval()
        i1 >= 10
        i1 <= 31

        i2 = tctl.Interval()
        i2 >= 10
        i2 <= 30

        self.assertFalse(i1.compare(i2))
Exemple #5
0
    def test_operatorEquals_onEqualIntervals(self):
        i1 = tctl.Interval()
        i1 >= 10
        i1 <= 30

        i2 = tctl.Interval()
        i2 >= 10
        i2 <= 30

        self.assertTrue(i1.compare(i2))
Exemple #6
0
    def test_operatorEquals_onEqualIntervals_differentDatatypes(self):
        i1 = tctl.Interval()
        i1 >= 10.0
        i1 <= 30

        i2 = tctl.Interval()
        i2 >= 10
        i2 <= 30.0

        self.assertTrue(i1.compare(i2))
Exemple #7
0
    def test_resolve_inifitesimal_resolve_lower_equals_plus_eps(self):
        i = tctl.Interval()
        i >= 0
        i <= (5 + eps)

        exp = tctl.Interval()
        exp >= 0
        exp <= 5

        self.assertEqual(i.resolve_infinitesimal(), exp)
Exemple #8
0
    def test_operatorLowerEquals_setsEndAndEndOperator(self):
        i = tctl.Interval()
        i <= 22

        self.assertEqual(i.end, 22, "End operator correctly set")
        self.assertEqual(i.end_operator, operator.le,
                         "End operator correctly set")
Exemple #9
0
    def test_operatorGreater_setsStartAndStartOperator(self):
        i = tctl.Interval()
        i > 17

        self.assertEqual(i.start, 17, "Start operator correctly set")
        self.assertEqual(i.start_operator, operator.gt,
                         "Start operator correctly set")
Exemple #10
0
    def test_need_transformation_timed_formula_other_interval(
            self, statespace):
        ap = NamedAtomicProposition("myAP")
        formula = tctl.EG(ap, interval=(tctl.Interval() <= 15))

        mc = ContinuousModelChecker(statespace)
        self.assertTrue(mc.need_transformation(formula))
Exemple #11
0
    def test_need_transformation_timed_formula_modified_interval_operators(
            self, statespace):
        ap = NamedAtomicProposition("myAP")
        formula = tctl.EG(ap, interval=(tctl.Interval() <= math.inf) > 0)

        mc = ContinuousModelChecker(statespace)
        self.assertFalse(mc.need_transformation(formula))
Exemple #12
0
    def test_operatorGreaterEquals_setsStartAndStartOperator(self):
        i = tctl.Interval()
        i >= 24

        self.assertEqual(i.start, 24, "Start operator correctly set")
        self.assertEqual(i.start_operator, operator.ge,
                         "Start operator correctly set")
Exemple #13
0
    def test_operatorLower_setsEndAndEndOperator(self):
        i = tctl.Interval()
        i < 15

        self.assertEqual(i.end, 15, "End operator correctly set")
        self.assertEqual(i.end_operator, operator.lt,
                         "Default end operator is correct")
Exemple #14
0
 def test_default(self):
     i = tctl.Interval()
     self.assertEqual(i.start, 0, "Default start is correct")
     self.assertEqual(i.start_operator, operator.ge,
                      "Default start operator is correct")
     self.assertEqual(i.end, math.inf, "Default end is correct")
     self.assertEqual(i.end_operator, operator.lt,
                      "Default end operator is correct")
Exemple #15
0
    def test_formula_creation_with_after(self):
        ap = NamedAtomicProposition("myAP")

        verifier = verif.is_possible(ap).after(52)

        exp = tctl.EF(ap, interval=tctl.Interval() > 52)
        got = verifier.formula
        self.assertTrue(exp.eq(got))
Exemple #16
0
    def test_always_possible_within_formula(self):
        ap = NamedAtomicProposition("myAP")

        verifier = verif.always_possible(ap, within=30)

        exp = tctl.AG(tctl.AF(ap, interval=tctl.Interval() <= 30))
        got = verifier.formula
        self.assertTrue(exp.eq(got))
Exemple #17
0
    def test_operatorIAdd_finiteEnd_addsToStartAndEnd(self):
        i = tctl.Interval()
        i.start = 10
        i.end = 20

        i += 33

        self.assertEqual(i.start, 43, "+= set the correct start value")
        self.assertEqual(i.end, 53, "+= set the correct end value")
Exemple #18
0
    def test_operatorISub_finiteEnd_subsFromStartAndEnd(self):
        i = tctl.Interval()
        i.start = 10
        i.end = 20

        i -= 7

        self.assertEqual(i.start, 3, "-= set the correct start value")
        self.assertEqual(i.end, 13, "-= set the correct end value")
Exemple #19
0
    def test_operatorIAdd_infiniteEnd_addsToStartButNotEnd(self):
        i = tctl.Interval()
        i.start = 12
        i.end = math.inf

        i += 33

        self.assertEqual(i.start, 45, "+= set the correct start value")
        self.assertEqual(i.end, math.inf, "+= set the correct end value")
Exemple #20
0
    def test_operatorISub_infiniteEnd_subsFromStartButNotEnd(self):
        i = tctl.Interval()
        i.start = 77
        i.end = math.inf

        i -= 7

        self.assertEqual(i.start, 70, "-= set the correct start value")
        self.assertEqual(i.end, math.inf, "-= set the correct end value")
Exemple #21
0
    def test_calling_correct_procedure(self):
        """
        This testroutine mocks the procedure implementations and
        verifies that the correct mock is called, depending on the formula.
        """
        mc = PointwiseModelChecker(self.ss)

        tl = check(self.system.timer) < 5
        tvl = check(self.system.timer) <= 3

        paramlist = {
            (tctl.EU(tl, tvl), "Sat_EU"),
            (tctl.EG(tl), "Sat_EG"),
            (tctl.EU(tl, tvl, tctl.Interval(end=25,
                                            end_op=operator.le)), "Sat_EUb"),
            (tctl.EU(tl, tvl, tctl.Interval(end=25,
                                            end_op=operator.lt)), "Sat_EUb"),
            (tctl.EU(tl, tvl, tctl.Interval(start=5,
                                            start_op=operator.ge)), "Sat_EUa"),
            (tctl.EU(tl, tvl, tctl.Interval(start=5,
                                            start_op=operator.gt)), "Sat_EUa"),
            (tctl.EU(
                tl, tvl,
                tctl.Interval(start=5,
                              start_op=operator.ge,
                              end=25,
                              end_op=operator.le)), "Sat_EUab"),
            (tctl.EU(
                tl, tvl,
                tctl.Interval(start=5,
                              start_op=operator.gt,
                              end=25,
                              end_op=operator.le)), "Sat_EUab"),
            (tctl.EU(
                tl, tvl,
                tctl.Interval(start=5,
                              start_op=operator.ge,
                              end=25,
                              end_op=operator.lt)), "Sat_EUab"),
            (tctl.EU(
                tl, tvl,
                tctl.Interval(start=5,
                              start_op=operator.gt,
                              end=25,
                              end_op=operator.lt)), "Sat_EUab"),
            (tctl.AU(
                tl, tvl,
                tctl.Interval(start=0,
                              start_op=operator.gt,
                              end=math.inf,
                              end_op=operator.lt)), "Sat_AU0"),
            (tctl.AU(
                tl, tvl,
                tctl.Interval(start=0,
                              start_op=operator.gt,
                              end=25,
                              end_op=operator.le)), "Sat_AU0"),
            (tctl.AU(
                tl, tvl,
                tctl.Interval(start=0,
                              start_op=operator.gt,
                              end=25,
                              end_op=operator.lt)), "Sat_AU0"),
        }

        for formula, method in paramlist:
            with self.subTest():
                setattr(mc, method, mock.MagicMock())
                res = mc.is_satisfiable(formula, None)
                getattr(mc, method).assert_called_once()