Exemplo n.º 1
0
    def test_print_violated_spec_egmod2(self):
        # Initialize the model
        ret = cmd.Cmd_SecureCommandExecute("read_model -i "
                                           "tests/pynusmv_tools/tlace/eg.smv")
        self.assertEqual(ret, 0, "cannot read the model")
        ret = cmd.Cmd_SecureCommandExecute("go")
        self.assertEqual(ret, 0, "cannot build the model")

        propDb = glob.prop_database()
        master = propDb.master
        fsm = propDb.master.bddFsm
        self.assertTrue(propDb.get_size() >= 2, "propDb has no properties")
        prop = propDb.get_prop_at_index(1)
        spec = prop.exprcore

        res = check(fsm, spec)
        self.assertFalse(res[0], "spec should be violated")
        self.assertIsNotNone(res[1], "TLACE should be given")

        print(xml_representation(fsm, res[1], spec))
Exemplo n.º 2
0
def check_and_explain(allargs):
    """
    Check specs on the given NuSMV model and compute TLACEs when needed.
    
    Build the model from a given file, check every CTL spec in it
    and compute and store TLACEs when needed.
    
    allargs -- a sys.args-like arguments list, without script name.
    """

    # Parse arguments
    parser = argparse.ArgumentParser(description='CTL model checker '
                                     'with TLACE generation.')
    # Populate arguments: for now, only the model
    parser.add_argument('model', help='the NuSMV model with specifications')
    args = parser.parse_args(allargs)

    # Initialize the model
    fsm = BddFsm.from_filename(args.model)
    propDb = glob.prop_database()

    # Check all CTL properties
    for prop in propDb:
        #  Check type
        if prop.type == propTypes['CTL']:
            spec = prop.exprcore

            (satisfied, cntex) = check_ctl_spec(fsm, spec)
            # Print the result and the TLACE if any
            print('Specification',
                  str(spec),
                  'is',
                  str(satisfied),
                  file=sys.stderr)

            if not satisfied:
                print(xml_representation(fsm, cntex, spec))

            print()