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)
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))
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