Beispiel #1
0
 def test_hoa_body(self):
     """Test that the HOA body is correct."""
     a0, a1 = LabelAtom(0), LabelAtom(1)
     state_edges_dict = OrderedDict({})
     state_edges_dict[State(0)] = [
         Edge(
             [0],
             label=~a0 & ~a1,
         ),
         Edge(
             [0],
             label=a0 & ~a1,
             acc_sig={0},
         ),
         Edge(
             [0],
             label=~a0 & a1,
             acc_sig={1},
         ),
         Edge(
             [0],
             label=a0 & a1,
             acc_sig={0, 1},
         ),
     ]
     hoa_body = HOABody(state_edges_dict)
     assert self.hoa_body == hoa_body
Beispiel #2
0
    def test_hoa(self):
        """Test that the HOA automaton is correct."""
        hoa_header = HOAHeader(
            identifier("v1"),
            Acceptance(Fin(0), identifier("co-Buchi")),
            nb_states=4,
            start_states={frozenset([0, 2]), frozenset([3])},
            propositions=(string("a"), string("b"), string("c")),
            name=string("(Fa & G(b&Xc)) | c"),
        )

        state_edges_dict = OrderedDict({})
        state_edges_dict[State(0, name=string("Fa"))] = [
            Edge([0], label=TRUE, acc_sig=frozenset({0})),
            Edge([1], label=LabelAtom(0)),
        ]
        state_edges_dict[State(1, name=string("true"))] = [Edge([1], label=TRUE)]
        state_edges_dict[State(2, name=string("G(b&Xc)"))] = [
            Edge([2, 3], label=LabelAtom(1))
        ]
        state_edges_dict[State(3, name=string("c"))] = [Edge([1], label=LabelAtom(2))]
        hoa_body = HOABody(state_edges_dict)

        hoa_obj = HOA(hoa_header, hoa_body)
        assert self.hoa_obj == hoa_obj
Beispiel #3
0
    def setup_class(cls):
        """Set the test up."""
        parser = HOAParser()
        cls.hoa_obj = parser(
            Path(TEST_ROOT_DIR, "examples", "aut4.hoa").read_text()
        )  # type: HOA
        cls.hoa_header = cls.hoa_obj.header
        cls.hoa_body = cls.hoa_obj.body

        cls.alias_a = LabelAlias(alias("@a"), LabelAtom(0))
        cls.alias_b = LabelAlias(alias("@bc"), LabelAtom(1) & LabelAtom(2))
Beispiel #4
0
 def test_body(self):
     """Test that the HOA body is correct."""
     state_edges_dict = OrderedDict({})
     state_edges_dict[State(0, name=string("a U b"))] = [
         Edge(
             [0],
             LabelAtom(0) & ~LabelAtom(1),
             {0},
         ),
         Edge([1], LabelAtom(1), {0}),
     ]
     state_edges_dict[State(1)] = [Edge([1], TRUE, {1})]
     assert self.hoa_body.state2edges == state_edges_dict
Beispiel #5
0
 def test_hoa_body(self):
     """Test that the HOA body is correct."""
     state_edges_dict = OrderedDict({})
     state_edges_dict[State(0, label=LabelAtom(0), acc_sig=frozenset({0}))] = [
         Edge([0]),
         Edge([1]),
     ]
     state_edges_dict[State(1, label=~LabelAtom(0))] = [
         Edge([0]),
         Edge([1]),
     ]
     hoa_body = HOABody(state_edges_dict)
     assert self.hoa_body == hoa_body
Beispiel #6
0
def test_printer_label():
    """Test the printer for label expressions."""
    a = LabelAtom(0)
    b = LabelAtom(1)
    c = LabelAtom(2)
    d = LabelAlias(alias("@d"), a & b)

    or_ = c | d
    not_ = ~or_

    expected = "(!(2 | @d))"
    actual = label_expression_to_string(not_)
    assert actual == expected
Beispiel #7
0
def test_propositions():
    """Test the accepting sets."""
    a = LabelAtom(0)
    b = LabelAtom(1)
    a_and_b = a & b
    c = LabelAtom(2)
    d = LabelAlias(alias("@d"), a & b)

    or_ = c | d
    not_ = ~or_

    assert isinstance(a_and_b, And)
    assert isinstance(or_, Or)
    assert isinstance(not_, Not)

    assert propositions(not_) == {0, 1, 2}
Beispiel #8
0
    def test_hoa(self):
        """Test that the HOA automaton is correct."""
        hoa_header = HOAHeader(
            identifier("v1"),
            Acceptance(Inf(0), identifier("Buchi")),
            nb_states=3,
            start_states={frozenset([0])},
            propositions=(string("a"),),
        )

        state_edges_dict = OrderedDict({})
        state_edges_dict[State(0)] = [
            Edge([1], label=LabelAtom(0)),
            Edge([2], label=~(LabelAtom(0))),
        ]
        state_edges_dict[State(1)] = [
            Edge([1], label=LabelAtom(0), acc_sig=frozenset({0})),
            Edge(
                [2],
                label=~(LabelAtom(0)),
                acc_sig=frozenset({0}),
            ),
        ]
        state_edges_dict[State(2)] = [
            Edge([1], label=LabelAtom(0)),
            Edge([2], label=~LabelAtom(0)),
        ]
        hoa_body = HOABody(state_edges_dict)

        hoa_obj = HOA(hoa_header, hoa_body)
        assert self.hoa_obj == hoa_obj
Beispiel #9
0
 def test_aliases(self):
     """Test that Alias is correct."""
     assert self.hoa_header.aliases[0] == LabelAlias(alias("@a"), LabelAtom(0))
     assert self.hoa_header.aliases[1] == LabelAlias(alias("@b"), LabelAtom(1))
Beispiel #10
0
    def test_hoa(self):
        """Test that the HOA automaton is correct."""
        hoa_header = HOAHeader(
            identifier("v1"),
            Acceptance(Inf(0), identifier("Buchi")),
            start_states={frozenset([0])},
            propositions=(string("a"), string("b")),
            name=string("GFa | G(b <-> Xa)"),
            properties=[
                identifier("explicit-labels"),
                identifier("trans-labels"),
                identifier("trans-acc"),
            ],
        )

        state_edges_dict = OrderedDict({})
        state_edges_dict[State(0)] = [
            Edge([1], label=TRUE),
            Edge([2], label=LabelAtom(1)),
            Edge([3], label=~(LabelAtom(1))),
        ]
        state_edges_dict[State(1, name=string("GFa"))] = [
            Edge([1], label=LabelAtom(0), acc_sig=frozenset({0})),
            Edge([1], label=~(LabelAtom(0))),
        ]
        state_edges_dict[State(2, name=string("a & G(b <-> Xa)"))] = [
            Edge(
                [2],
                label=LabelAtom(0) & LabelAtom(1),
                acc_sig=frozenset({0}),
            ),
            Edge(
                [3],
                label=LabelAtom(0) & ~LabelAtom(1),
                acc_sig=frozenset({0}),
            ),
        ]
        state_edges_dict[State(3, name=string("!a & G(b <-> Xa)"))] = [
            Edge(
                [2],
                label=~LabelAtom(0) & LabelAtom(1),
                acc_sig=frozenset({0}),
            ),
            Edge(
                [3],
                label=~LabelAtom(0) & ~LabelAtom(1),
                acc_sig=frozenset({0}),
            ),
        ]
        hoa_body = HOABody(state_edges_dict)

        hoa_obj = HOA(hoa_header, hoa_body)
        assert self.hoa_obj == hoa_obj
Beispiel #11
0
 def atom_label_expr(self, args):
     """Parse the 'atom_label_expr' node."""
     return LabelAtom(args[0])