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"