示例#1
0
def test_decoder_complex():
    erl = Erlang()
    T, L = erl.Term, erl.List
    s1, s2 = "0.0.0.39316", "0.0.0.39317"
    env = cenv.Env()
    env.bind(s1, T.int(1))
    env.bind(s2, T.int(2))
    # Create the term with shared subterms.
    tal = cc.mk_alias("0.0.0.42")
    x = cc.mk_tuple([tal, tal])
    xv = x.shared["0.0.0.42"]
    xv.type = ErlangTerm.LIST
    xv.subterms.extend([cc.mk_symb(s1)])
    terms = [
        ( # [1,2]
            cc.mk_list([cc.mk_symb(s1), cc.mk_symb(s2)]),
            T.lst(L.cons(T.int(1),L.cons(T.int(2),L.nil)))
        ),
        ( # {1,2}
            cc.mk_tuple([cc.mk_int(1), cc.mk_symb(s2)]),
            T.tpl(L.cons(T.int(1),L.cons(T.int(2),L.nil)))
        ),
        ( # {[1],[1]}
            x,
            T.tpl(L.cons(T.lst(L.cons(T.int(1),L.nil)),L.cons(T.lst(L.cons(T.int(1),L.nil)),L.nil)))
        ),
    ]
    decode_and_check(erl, env, terms)
示例#2
0
def test_decoder_complex():
    erl = Erlang()
    T, L = erl.Term, erl.List
    s1, s2 = "0.0.0.39316", "0.0.0.39317"
    env = cenv.Env()
    env.bind(s1, T.int(1))
    env.bind(s2, T.int(2))
    # Create the term with shared subterms.
    tal = cc.mk_alias("0.0.0.42")
    x = cc.mk_tuple([tal, tal])
    xv = x.shared["0.0.0.42"]
    xv.type = ErlangTerm.LIST
    xv.subterms.extend([cc.mk_symb(s1)])
    terms = [
        ( # [1,2]
            cc.mk_list([cc.mk_symb(s1), cc.mk_symb(s2)]),
            T.lst(L.cons(T.int(1),L.cons(T.int(2),L.nil)))
        ),
        ( # {1,2}
            cc.mk_tuple([cc.mk_int(1), cc.mk_symb(s2)]),
            T.tpl(L.cons(T.int(1),L.cons(T.int(2),L.nil)))
        ),
        ( # {[1],[1]}
            x,
            T.tpl(L.cons(T.lst(L.cons(T.int(1),L.nil)),L.cons(T.lst(L.cons(T.int(1),L.nil)),L.nil)))
        ),
    ]
    decode_and_check(erl, env, terms)
示例#3
0
    def encode_model(self):
        """
		Encode the resulting model.
		"""
        entries = []
        for var in self.vars:
            val = self.solver.get_value(var)
            assert isinstance(val, list) and len(val) == 1
            val = val[0]
            assert isinstance(val, list) and len(val) == 2
            val = self.encode(expand_lets(val[1]))
            entries.append(cc.mk_model_entry(cc.mk_symb(var[1:-1]), val))
        self.solver.exit()
        return cc.mk_model_data(cc.mk_model(entries))
示例#4
0
def sample_entries():
    es = [dict() for _ in range(4)]
    # 1st log entry.
    es[0]["type"] = LogEntry.OP_PARAMS
    es[0]["args"] = [
          cc.mk_symb("0.0.0.44")
        , cc.mk_symb("0.0.0.45")
        , cc.mk_symb("0.0.0.46")
    ]
    es[0]["is_constraint"] = False
    es[0]["tag"] = 0
    es[0]["message"] = cc.mk_log_entry(es[0]["type"], es[0]["args"])
    # 2nd log entry.
    es[1]["type"] = LogEntry.OP_MATCH_EQUAL_FALSE
    es[1]["args"] = [
          cc.mk_atom([110, 101, 116])
        , cc.mk_symb("0.0.0.46")
    ]
    es[1]["tag"] = 50
    es[1]["is_constraint"] = True
    es[1]["message"] = cc.mk_log_entry(es[1]["type"], es[1]["args"], es[1]["tag"], es[1]["is_constraint"])
    # 3rd log entry.
    es[2]["type"] = LogEntry.OP_MATCH_EQUAL_TRUE
    es[2]["tag"] = 105
    es[2]["is_constraint"] = True
    es[2]["args"] = [
          cc.mk_atom([101, 114, 108, 97, 110, 103])
        , cc.mk_symb("0.0.0.44")
    ]
    es[2]["message"] = cc.mk_log_entry(es[2]["type"], es[2]["args"], es[2]["tag"], es[2]["is_constraint"])
    # 4th log entry.
    es[3]["type"] = LogEntry.OP_MATCH_EQUAL_FALSE
    es[3]["tag"] = 105
    es[3]["is_constraint"] = True
    es[3]["args"] = [
          cc.mk_atom([116, 114, 117, 101])
        , cc.mk_symb("0.0.0.39316")
    ]
    es[3]["message"] = cc.mk_log_entry(es[3]["type"], es[3]["args"], es[3]["tag"], es[3]["is_constraint"])
    return es