示例#1
0
class GRSpec_test(object):
    def setup_method(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_method(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 'z' in h.env_vars
        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)}
        with pytest.raises(ValueError):
            self.f.__or__(g)

        # Domain mismatch on environment variable x
        g.sys_vars = dict()
        g.env_vars["x"] = (0, 3)
        with pytest.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")
示例#2
0
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 'z' in h.env_vars
        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")