コード例 #1
0
ファイル: spec_test.py プロジェクト: ericskim/tulip-control
class GRSpec_test:
    def setUp(self):
        self.f = GRSpec(env_vars={"x"}, sys_vars={"y"},
                        env_init=["x"], sys_safety=["y"],
                        env_prog=["!x", "x"], sys_prog=["y&&!x"])
        self.triv = GRSpec(env_vars=["x"], sys_vars=["y"],
                           env_init=["x && !x"])
        self.empty = GRSpec()

    def tearDown(self):
        self.f = None

    def test_sym_to_prop(self):
        original_env_vars = copy.copy(self.f.env_vars)
        original_sys_vars = copy.copy(self.f.sys_vars)
        self.f.sym_to_prop({"x":"bar", "y":"uber||cat"})
        assert self.f.env_vars == original_env_vars and self.f.sys_vars == original_sys_vars
        assert self.f.env_prog == ["!(bar)", "(bar)"] and self.f.sys_prog == ["(uber||cat)&&!(bar)"]

    def test_or(self):
        g = GRSpec(env_vars={"z"}, env_prog=["!z"])
        h = self.f | g
        assert len(h.env_vars) == 2 and h.env_vars.has_key("z")
        assert len(h.env_prog) == len(self.f.env_prog)+1 and "!z" in h.env_prog

        # Domain mismatch on system variable y
        g.sys_vars = {"y": (0,5)}
        nt.assert_raises(ValueError, self.f.__or__, g)

        # Domain mismatch on environment variable x
        g.sys_vars = dict()
        g.env_vars["x"] = (0,3)
        nt.assert_raises(ValueError, self.f.__or__, g)

    def test_to_canon(self):
        # Fragile!
        assert self.f.to_canon() == "((x) && []<>(!x) && []<>(x)) -> ([](y) && []<>(y&&!x))"
        # N.B., for self.triv, to_canon() returns a formula missing
        # the assumption part not because it detected that the
        # assumption is false, but rather the guarantee is empty (and
        # thus interpreted as being "True").
        assert self.triv.to_canon() == "True"
        assert self.empty.to_canon() == "True"

    def test_init(self):
        assert len(self.f.env_vars) == 1 and len(self.f.sys_vars) == 1
        assert self.f.env_vars["x"] == "boolean" and self.f.sys_vars["y"] == "boolean"