def test_submachines_machine(self):
        states, trans = make_submachines_machine(use_logging=False)
        hsm = HSM(states, trans)

        l0_start = get_state_by_sig(('left', 0, 'start'), hsm.flattened)
        s0_top = get_state_by_sig(('subs', 0, 'top'), hsm.flattened)
        s1_final = get_state_by_sig(('subs', 1, 'final'), hsm.flattened)

        tree = tree_from_state_set( set([l0_start, s0_top, s1_final]) )
        assert len(tree) == 1  # only one root node

        assert self.extract_names(tree) == [
            ('top', [
                ('left', [
                    ('left[0].top', [
                        ('left[0].start', [])
                    ]),
                ]),
                ('right', [
                    ('subs', [
                        ('subs[0].top', []),
                        ('subs[1].top', [
                            ('subs[1].final', []),
                        ]),
                    ]),
                ])
            ]),
        ]
    def test_miro_machine(self):
        states, trans = make_miro_machine(use_logging=False)
        hsm = HSM(states, trans)

        s1 = get_state_by_sig(('s11',), hsm.flattened)
        s211 = get_state_by_sig(('s211',), hsm.flattened)

        tree = tree_from_state_set( set([s1, s211]) )
        assert len(tree) == 1  # only one root node

        assert self.extract_names(tree) == [
            ('top', [
                ('s', [
                    ('s1', [
                        ('s11', [])
                    ]),
                    ('s2', [
                        ('s21', [
                            ('s211', []),
                        ])
                    ])
                ]),
                # ('final', []),  # final should NOT be in the tree
            ])
        ]
예제 #3
0
    def test_run(self, state_name, Event, foo_before, foo_expected,
                 exp_responding_state, exp_transition_target):
        mock_hsm = MockHSM()
        mock_hsm.data.foo = foo_before
        state = get_state_by_sig((state_name,), self.hsm.flattened)
        tree = tree_from_state_set(set([state]))

        resps = get_responses(tree, Event(), self.hsm.trans, mock_hsm)

        if exp_responding_state is None:
            assert resps == []
        else:
            assert len(resps) == 1  # no orthogonal regions in this HSM
            resp_subtrees, trans = zip(*resps)
            assert resp_subtrees[0][0].name == exp_responding_state
            tran = trans[0]

            if exp_transition_target is not None:
                assert State.sig_to_name(tran.target) == exp_transition_target
            else:
                assert tran.target is None

            tran.action(None, mock_hsm)  # this call might change 'foo' value
                                         # event is not relevant

        if foo_expected != 'ignored':
            assert mock_hsm.data.foo == foo_expected
예제 #4
0
def check(hsm, states, Event, exp_resp_states, exp_tran_targets):
    state_set = set([get_state_by_sig(sig, hsm.flattened) for sig in states])
    tree = tree_from_state_set(state_set)
    resps = get_responses(tree, Event(), hsm.trans, None)

    if exp_resp_states or exp_tran_targets:
        resp_subtrees, trans = zip(*resps)
        assert len(resp_subtrees) == len(exp_resp_states)
        resp_sigs = set([st.sig for st, _ in resp_subtrees])
        assert resp_sigs == set(exp_resp_states)

        assert len(trans) == len(exp_tran_targets)
        target_ids = set([tr.target for tr in trans])
        assert target_ids == set(exp_tran_targets)
    else:
        assert resps == []
예제 #5
0
    def test_choice(self, states, event, exp_resp_states, exp_tran_targets):
        state_set = set([get_state_by_sig((name,), self.hsm.flattened)
                         for name in states])
        tree = tree_from_state_set(state_set)
        resps = get_responses(tree, event, self.hsm.trans, None)
        print resps

        if exp_resp_states or exp_tran_targets:
            resp_subtrees, trans = zip(*resps)
            assert len(resp_subtrees) == len(exp_resp_states)
            resp_names = set([st.name for st, _ in resp_subtrees])
            assert resp_names == set(exp_resp_states)

            assert len(trans) == len(exp_tran_targets)
            target_ids = set([State.sig_to_name(tr.target) for tr in trans])
            assert target_ids == set(exp_tran_targets)
        else:
            assert resps == []