Esempio n. 1
0
    def test_eag_explain(self):
        fsm = self.init_model()
        self.assertIsNotNone(fsm)

        spec = parseArctl("E<'run = rc1'>G 'c1.c <= 2'")[0]
        specbdd = evalArctl(fsm, spec)

        s = fsm.pick_one_state(specbdd & fsm.init)
        self.assertTrue((specbdd & fsm.init).isnot_false())
        self.assertIsNotNone(s)
        self.assertTrue(s.isnot_false())

        ac = evalStr(fsm, "'run = rc1'")
        phi = evalStr(fsm, "'c1.c <= 2'")

        (path, (inputs, loop)) = explain_eag(fsm, s, ac, phi)

        # loop and inputs are not None: the explanation is an infinite path
        self.assertIsNotNone(inputs)
        self.assertIsNotNone(loop)

        # Check that path contains states of phi and psi
        self.assertTrue(s == path[0])
        for state, inputs in zip(path[::2], path[1::2]):
            self.assertTrue(state <= phi)
            self.assertTrue(inputs <= ac)
        self.assertTrue(path[-1] <= phi)

        # Check that path is a path of fsm
        for s, i, sp in zip(path[::2], path[1::2], path[2::2]):
            self.assertTrue(sp <= fsm.post(s, i))

        # Check that loop is effectively a loop
        self.assertTrue(loop in path)
        self.assertTrue(loop <= fsm.post(path[-1], inputs))
Esempio n. 2
0
 def test_eag_explain(self):
     fsm = self.init_model()
     self.assertIsNotNone(fsm)
     
     spec = parseArctl("E<'run = rc1'>G 'c1.c <= 2'")[0]
     specbdd = evalArctl(fsm, spec)
     
     s = fsm.pick_one_state(specbdd & fsm.init)
     self.assertTrue((specbdd & fsm.init).isnot_false())
     self.assertIsNotNone(s)
     self.assertTrue(s.isnot_false())
     
     ac = evalStr(fsm, "'run = rc1'")
     phi = evalStr(fsm, "'c1.c <= 2'")
     
     (path, (inputs, loop)) = explain_eag(fsm, s, ac, phi)
     
     # loop and inputs are not None: the explanation is an infinite path
     self.assertIsNotNone(inputs)
     self.assertIsNotNone(loop)
     
     # Check that path contains states of phi and psi
     self.assertTrue(s == path[0])
     for state, inputs in zip(path[::2], path[1::2]):
         self.assertTrue(state <= phi)
         self.assertTrue(inputs <= ac)
     self.assertTrue(path[-1] <= phi)
     
     # Check that path is a path of fsm
     for s, i, sp in zip(path[::2], path[1::2], path[2::2]):
         self.assertTrue(sp <= fsm.post(s, i))
         
     # Check that loop is effectively a loop
     self.assertTrue(loop in path)
     self.assertTrue(loop <= fsm.post(path[-1], inputs))
Esempio n. 3
0
    def test_eau_explain(self):
        fsm = self.init_model()
        self.assertIsNotNone(fsm)

        spec = parseArctl("E<'TRUE'>['c1.c < 2' U 'c1.c = 2']")[0]
        specbdd = evalArctl(fsm, spec)

        s = fsm.pick_one_state(specbdd & fsm.init)
        self.assertTrue((specbdd & fsm.init).isnot_false())
        self.assertIsNotNone(s)
        self.assertTrue(s.isnot_false())

        ac = evalStr(fsm, "'TRUE'")
        phi = evalStr(fsm, "'c1.c < 2'")
        psi = evalStr(fsm, "'c1.c = 2'")

        path = explain_eau(fsm, s, ac, phi, psi)

        # Check that path contains states of phi and psi
        self.assertTrue(s == path[0])
        for state, inputs in zip(path[::2], path[1::2]):
            self.assertTrue(state <= phi)
            self.assertTrue(inputs <= ac)
        self.assertTrue(path[-1] <= psi)

        # Check that path is a path of fsm
        for s, i, sp in zip(path[::2], path[1::2], path[2::2]):
            self.assertTrue(sp <= fsm.post(s, i))
Esempio n. 4
0
 def test_eau_explain(self):
     fsm = self.init_model()
     self.assertIsNotNone(fsm)
     
     spec = parseArctl("E<'TRUE'>['c1.c < 2' U 'c1.c = 2']")[0]
     specbdd = evalArctl(fsm, spec)
     
     s = fsm.pick_one_state(specbdd & fsm.init)
     self.assertTrue((specbdd & fsm.init).isnot_false())
     self.assertIsNotNone(s)
     self.assertTrue(s.isnot_false())
     
     ac = evalStr(fsm, "'TRUE'")
     phi = evalStr(fsm, "'c1.c < 2'")
     psi = evalStr(fsm, "'c1.c = 2'")
     
     path = explain_eau(fsm, s, ac, phi, psi)
     
     # Check that path contains states of phi and psi
     self.assertTrue(s == path[0])
     for state, inputs in zip(path[::2], path[1::2]):
         self.assertTrue(state <= phi)
         self.assertTrue(inputs <= ac)
     self.assertTrue(path[-1] <= psi)
     
     # Check that path is a path of fsm
     for s, i, sp in zip(path[::2], path[1::2], path[2::2]):
         self.assertTrue(sp <= fsm.post(s, i))
Esempio n. 5
0
 def test_not(self):
     fsm = self.init_model()
     
     specs = parseArctl("~'c'")
     self.assertEqual(len(specs), 1)
     spec = specs[0]
     
     nc = evalArctl(fsm, spec)
     self.assertTrue((nc & fsm.init).is_false())
Esempio n. 6
0
    def test_not(self):
        fsm = self.init_model()

        specs = parseArctl("~'c'")
        self.assertEqual(len(specs), 1)
        spec = specs[0]

        nc = evalArctl(fsm, spec)
        self.assertTrue((nc & fsm.init).is_false())
Esempio n. 7
0
 def test_atom(self):
     fsm = self.init_model()
     
     specs = parseArctl("'c'")
     self.assertEqual(len(specs), 1)
     spec = specs[0]
     self.assertEqual(type(spec), Atom)
     self.assertEqual(spec.value, "c")
     
     c = evalArctl(fsm, spec)
     self.assertIsNotNone(c)
     self.assertTrue(fsm.init <= c)
Esempio n. 8
0
    def test_atom(self):
        fsm = self.init_model()

        specs = parseArctl("'c'")
        self.assertEqual(len(specs), 1)
        spec = specs[0]
        self.assertEqual(type(spec), Atom)
        self.assertEqual(spec.value, "c")

        c = evalArctl(fsm, spec)
        self.assertIsNotNone(c)
        self.assertTrue(fsm.init <= c)
Esempio n. 9
0
    def test_explain_and_atom(self):
        fsm = self.init_model()
        self.assertIsNotNone(fsm)

        spec = parseArctl("'c1.c <= 2' & 'c2.c < 1'")[0]
        specbdd = evalArctl(fsm, spec)

        s = fsm.pick_one_state(specbdd & fsm.init)
        self.assertTrue(s.isnot_false())

        (path, (inp, loop)) = explain_witness(fsm, s, spec)
        # Check that no loop
        self.assertIsNone(inp)
        self.assertIsNone(loop)

        # Check path
        self.assertEqual(path, (s, ))
Esempio n. 10
0
 def test_explain_atom(self):
     fsm = self.init_model()
     self.assertIsNotNone(fsm)
     
     spec = parseArctl("'c1.c <= 2'")[0]
     specbdd = evalArctl(fsm, spec)
     
     s = fsm.pick_one_state(specbdd & fsm.init)
     self.assertTrue(s.isnot_false())
     
     (path, (inp, loop)) = explain_witness(fsm, s, spec)
     # Check that no loop
     self.assertIsNone(inp)
     self.assertIsNone(loop)
     
     # Check path
     self.assertEqual(path, (s,))
Esempio n. 11
0
    def test_eax_explain(self):
        fsm = self.init_model()
        self.assertIsNotNone(fsm)

        spec = parseArctl("E<'TRUE'>X 'c1.c = 1'")[0]
        specbdd = evalArctl(fsm, spec)

        s = fsm.pick_one_state(specbdd & fsm.init)
        self.assertIsNotNone(s)

        ac = evalStr(fsm, "'TRUE'")
        phi = evalStr(fsm, "'c1.c = 1'")

        path = explain_eax(fsm, s, ac, phi)

        self.assertTrue(s == path[0])
        self.assertTrue(path[1] <= ac)
        self.assertTrue(path[2] <= phi)
        self.assertTrue(path[2] <= fsm.post(s, path[1]))
Esempio n. 12
0
 def test_eax_explain(self):
     fsm = self.init_model()
     self.assertIsNotNone(fsm)
     
     spec = parseArctl("E<'TRUE'>X 'c1.c = 1'")[0]
     specbdd = evalArctl(fsm, spec)
     
     s = fsm.pick_one_state(specbdd & fsm.init)
     self.assertIsNotNone(s)
     
     ac = evalStr(fsm, "'TRUE'")
     phi = evalStr(fsm, "'c1.c = 1'")
     
     path = explain_eax(fsm, s, ac, phi)
     
     self.assertTrue(s == path[0])
     self.assertTrue(path[1] <= ac)
     self.assertTrue(path[2] <= phi)
     self.assertTrue(path[2] <= fsm.post(s, path[1]))