def test_CodeTree(): code_tree = CodeTree('./code_base/basis_code.jcb', Example) code_tree.build_opcodes_by_types() assert isinstance(code_tree.opcode_by_arg_type[Block.type_picture], dict) assert isinstance( code_tree.opcode_by_arg_type[Block.type_picture][Block.type_picture], dict) assert isinstance( code_tree.opcode_by_arg_type[Block.type_picture][Block.type_nothing], list) assert isinstance(code_tree.opcode_by_ret_type[Block.type_picture], list) assert Block.type_core not in code_tree.opcode_by_ret_type args_pic_nesw = code_tree.opcode_by_arg_type[Block.type_picture][ Block.type_NESW][Block.type_nothing] assert BopForward.bopforward_pic_nesw_extend in args_pic_nesw code_tree.build_codeitems_from_codebase() code_tree.build_isomorphisms() nvs = 0 nva = 0 nci = 0 np0 = 0 npp = 0 for use, variants in code_tree.variant_by_stackuse.items(): nvs += 1 for variant in variants: nva += 1 for code_item in code_tree.alleles_by_variant[variant]: nci += 1 assert code_item in code_tree.prior_by_codeitem if code_tree.prior_by_codeitem[code_item] == 0: np0 += 1 else: npp += 1 assert nvs >= 4 and nva > 250 and nci > 300 and np0 > 140 and npp > 150 code_tree.aggregate_priors() sum_priors = 0 for prior in code_tree.prior_by_codeitem.values(): assert prior >= 1e-9 and prior <= 1 sum_priors += prior sum_mp = 0 items = 0 last_prior = 0 for use, moves in code_tree.item_prior_by_stackuse.items(): nvs -= 1 for i, (item, prior) in enumerate(moves): if i > 0: assert prior <= last_prior items += 1 sum_mp += prior last_prior = prior assert nvs == 0 and math.isclose(sum_mp, sum_priors) and items == npp + np0