payed off testing technical debt + bug fixes + traces based evaluator

This commit is contained in:
Marcell Vazquez-Chanlatte 2017-11-11 17:35:48 -08:00
parent 72639bc59f
commit cba8a83c8e
12 changed files with 302 additions and 172 deletions

View file

@ -1,22 +1,47 @@
import unittest
import stl
from stl.hypothesis import SignalTemporalLogicStrategy
from hypothesis import given
class TestSTLAST(unittest.TestCase):
def test_and(self):
phi = stl.parse("x")
self.assertEqual(stl.TOP, stl.TOP | phi)
self.assertEqual(stl.BOT, stl.BOT & phi)
self.assertEqual(stl.TOP, phi | stl.TOP)
self.assertEqual(stl.BOT, phi & stl.BOT)
self.assertEqual(phi, phi & stl.TOP)
self.assertEqual(phi, phi | stl.BOT)
self.assertEqual(stl.TOP, stl.TOP & stl.TOP)
self.assertEqual(stl.BOT, stl.BOT | stl.BOT)
self.assertEqual(stl.TOP, stl.TOP | stl.BOT)
self.assertEqual(stl.BOT, stl.TOP & stl.BOT)
self.assertEqual(~stl.BOT, stl.TOP)
self.assertEqual(~stl.TOP, stl.BOT)
self.assertEqual(~~stl.BOT, stl.BOT)
self.assertEqual(~~stl.TOP, stl.TOP)
@given(SignalTemporalLogicStrategy)
def test_identities(phi):
assert stl.TOP == stl.TOP | phi
assert stl.BOT == stl.BOT & phi
assert stl.TOP == phi | stl.TOP
assert stl.BOT == phi & stl.BOT
assert phi == phi & stl.TOP
assert phi == phi | stl.BOT
assert stl.TOP == stl.TOP & stl.TOP
assert stl.BOT == stl.BOT | stl.BOT
assert stl.TOP == stl.TOP | stl.BOT
assert stl.BOT == stl.TOP & stl.BOT
assert ~stl.BOT == stl.TOP
assert ~stl.TOP == stl.BOT
assert ~~stl.BOT == stl.BOT
assert ~~stl.TOP == stl.TOP
assert (phi & phi) & phi == phi & (phi & phi)
assert (phi | phi) | phi == phi | (phi | phi)
assert ~~phi == phi
def test_lineqs_unittest():
phi = stl.parse('(G[0, 1](x + y > a?)) & (F[1,2](z - x > 0))')
assert len(phi.lineqs) == 2
assert phi.lineqs == {stl.parse('x + y > a?'), stl.parse('z - x > 0')}
phi = stl.parse('(G[0, 1](x + y > a?)) U (F[1,2](z - x > 0))')
assert len(phi.lineqs) == 2
assert phi.lineqs == {stl.parse('x + y > a?'), stl.parse('z - x > 0')}
phi = stl.parse('G(⊥)')
assert phi.lineqs == set()
phi = stl.parse('F()')
assert phi.lineqs == set()
def test_walk():
phi = stl.parse(
'((G[0, 1](x + y > a?)) & (F[1,2](z - x > 0))) | ((X(AP1)) U (AP2))')
assert len(list((~phi).walk())) == 11