WORKS
This commit is contained in:
parent
521e317a39
commit
abc54f2324
4 changed files with 23 additions and 319 deletions
|
@ -198,14 +198,11 @@ def get_test_case_source(f_name: str, test_case: Params, i: int, indent: int):
|
||||||
|
|
||||||
output = invoke(f_name, test_case)
|
output = invoke(f_name, test_case)
|
||||||
|
|
||||||
if type(output) == str:
|
|
||||||
output = f"'{output}'"
|
|
||||||
|
|
||||||
return f"""{space}def test_{f_name_orig}_{i}(self):
|
return f"""{space}def test_{f_name_orig}_{i}(self):
|
||||||
{space}{single_indent}assert {call_statement(f_name_orig, test_case)} == {output}"""
|
{space}{single_indent}assert {call_statement(f_name_orig, test_case)} == {repr(output)}"""
|
||||||
|
|
||||||
|
|
||||||
def get_test_class(f_name: str, case: set[Params]) -> str:
|
def get_test_class(f_name: str, cases: set[Params]) -> str:
|
||||||
f_name_orig = BranchTransformer.to_original_name(f_name)
|
f_name_orig = BranchTransformer.to_original_name(f_name)
|
||||||
|
|
||||||
test_class = (f"from unittest import TestCase\n\nfrom {module_of[f_name]} import {f_name_orig}\n\n\n"
|
test_class = (f"from unittest import TestCase\n\nfrom {module_of[f_name]} import {f_name_orig}\n\n\n"
|
||||||
|
|
33
genetic.py
33
genetic.py
|
@ -14,7 +14,7 @@ CXPROB = 0.5
|
||||||
TOURNSIZE = 3
|
TOURNSIZE = 3
|
||||||
NPOP = 300
|
NPOP = 300
|
||||||
NGEN = 200
|
NGEN = 200
|
||||||
REPS = 10
|
REPS = 1
|
||||||
|
|
||||||
to_test: str = ""
|
to_test: str = ""
|
||||||
|
|
||||||
|
@ -40,14 +40,8 @@ def generate(f_name: str):
|
||||||
|
|
||||||
toolbox = base.Toolbox()
|
toolbox = base.Toolbox()
|
||||||
toolbox.register("attr_test_case", get_test_case_generator(to_test, instrument.functions[to_test]))
|
toolbox.register("attr_test_case", get_test_case_generator(to_test, instrument.functions[to_test]))
|
||||||
toolbox.register("individual",
|
toolbox.register("individual", tools.initIterate, creator.Individual, lambda: toolbox.attr_test_case())
|
||||||
tools.initIterate,
|
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
|
||||||
creator.Individual,
|
|
||||||
lambda: toolbox.attr_test_case())
|
|
||||||
toolbox.register("population",
|
|
||||||
tools.initRepeat,
|
|
||||||
list,
|
|
||||||
toolbox.individual)
|
|
||||||
toolbox.register("evaluate", compute_fitness)
|
toolbox.register("evaluate", compute_fitness)
|
||||||
|
|
||||||
def mate(tc1, tc2):
|
def mate(tc1, tc2):
|
||||||
|
@ -77,6 +71,8 @@ def generate(f_name: str):
|
||||||
coverage.append(cov)
|
coverage.append(cov)
|
||||||
|
|
||||||
print(coverage)
|
print(coverage)
|
||||||
|
return set(list(instrument.archive_true_branches.values()) +
|
||||||
|
list(instrument.archive_false_branches.values()))
|
||||||
|
|
||||||
|
|
||||||
def compute_fitness(individual: list) -> tuple[float]:
|
def compute_fitness(individual: list) -> tuple[float]:
|
||||||
|
@ -87,12 +83,17 @@ def compute_fitness(individual: list) -> tuple[float]:
|
||||||
instrument.distances_true = {}
|
instrument.distances_true = {}
|
||||||
instrument.distances_false = {}
|
instrument.distances_false = {}
|
||||||
|
|
||||||
|
# the archive_true_branches and archive_false_branches are reset after
|
||||||
|
# each generation. This is intentional as they are used to archive branches that
|
||||||
|
# have already been covered, and their presence increases the fitness value of
|
||||||
|
# test cases that would re-cover them
|
||||||
|
|
||||||
# Run the function under test
|
# Run the function under test
|
||||||
try:
|
try:
|
||||||
out = instrument.invoke(to_test, x)
|
out = instrument.invoke(to_test, x)
|
||||||
except AssertionError:
|
except AssertionError:
|
||||||
print(to_test, x, "=", "[FAILS] fitness = 10000")
|
print(to_test, x, "=", "[FAILS] fitness = 100.0")
|
||||||
return 10000,
|
return 100.0,
|
||||||
|
|
||||||
fitness = 0.0
|
fitness = 0.0
|
||||||
|
|
||||||
|
@ -103,13 +104,14 @@ def compute_fitness(individual: list) -> tuple[float]:
|
||||||
instrument.archive_true_branches[branch] = x
|
instrument.archive_true_branches[branch] = x
|
||||||
if branch not in instrument.archive_true_branches:
|
if branch not in instrument.archive_true_branches:
|
||||||
fitness += normalize(instrument.distances_true[branch])
|
fitness += normalize(instrument.distances_true[branch])
|
||||||
|
elif branch in instrument.distances_false:
|
||||||
for branch in range(range_start, range_end):
|
|
||||||
if branch in instrument.distances_false:
|
|
||||||
if instrument.distances_false[branch] == 0 and branch not in instrument.archive_false_branches:
|
if instrument.distances_false[branch] == 0 and branch not in instrument.archive_false_branches:
|
||||||
instrument.archive_false_branches[branch] = x
|
instrument.archive_false_branches[branch] = x
|
||||||
if branch not in instrument.archive_false_branches:
|
if branch not in instrument.archive_false_branches:
|
||||||
fitness += normalize(instrument.distances_false[branch])
|
fitness += normalize(instrument.distances_false[branch])
|
||||||
|
else:
|
||||||
|
fitness += 1.0
|
||||||
|
|
||||||
print(to_test, x, "=", out, "fitness =", fitness)
|
print(to_test, x, "=", out, "fitness =", fitness)
|
||||||
return fitness,
|
return fitness,
|
||||||
|
|
||||||
|
@ -117,9 +119,8 @@ def compute_fitness(individual: list) -> tuple[float]:
|
||||||
def main():
|
def main():
|
||||||
instrument.load_benchmark(save_instrumented=False) # instrument all files in benchmark
|
instrument.load_benchmark(save_instrumented=False) # instrument all files in benchmark
|
||||||
f_name = "railencrypt_instrumented"
|
f_name = "railencrypt_instrumented"
|
||||||
generate(f_name)
|
cases = generate(f_name)
|
||||||
with open(os.path.join(OUT_DIR, f_name + ".py"), "w") as f:
|
with open(os.path.join(OUT_DIR, f_name + ".py"), "w") as f:
|
||||||
cases = get_test_cases(f_name, instrument.functions[f_name], 100)
|
|
||||||
f.write(get_test_class(f_name, cases))
|
f.write(get_test_class(f_name, cases))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -211,10 +211,7 @@ def load_benchmark(save_instrumented=True):
|
||||||
def call_statement(f_name: str, f_args: Params) -> str:
|
def call_statement(f_name: str, f_args: Params) -> str:
|
||||||
arg_list: list[str] = []
|
arg_list: list[str] = []
|
||||||
for k, v in f_args.items():
|
for k, v in f_args.items():
|
||||||
if type(v) == str:
|
arg_list.append(f"{k}={repr(v)}") # quote strings
|
||||||
arg_list.append(f"{k}='{v}'") # quote strings
|
|
||||||
else:
|
|
||||||
arg_list.append(f"{k}={v}")
|
|
||||||
|
|
||||||
return f"{f_name}({', '.join(arg_list)})"
|
return f"{f_name}({', '.join(arg_list)})"
|
||||||
|
|
||||||
|
|
|
@ -5,301 +5,10 @@ from benchmark.railfence_cipher import railencrypt
|
||||||
|
|
||||||
class Test_railencrypt(TestCase):
|
class Test_railencrypt(TestCase):
|
||||||
def test_railencrypt_1(self):
|
def test_railencrypt_1(self):
|
||||||
assert railencrypt(st='FKglwgJ(p', k=840) == 'FKglwgJ(p'
|
assert railencrypt(st='6u#%', k=3) == '6u%#'
|
||||||
|
|
||||||
def test_railencrypt_2(self):
|
def test_railencrypt_2(self):
|
||||||
assert railencrypt(st='gvj', k=379) == 'gvj'
|
assert railencrypt(st='6uD*z(', k=3) == '6zu*(D'
|
||||||
|
|
||||||
def test_railencrypt_3(self):
|
def test_railencrypt_3(self):
|
||||||
assert railencrypt(st='', k=755) == ''
|
assert railencrypt(st='(', k=307) == '('
|
||||||
|
|
||||||
def test_railencrypt_4(self):
|
|
||||||
assert railencrypt(st='9pS', k=577) == '9pS'
|
|
||||||
|
|
||||||
def test_railencrypt_5(self):
|
|
||||||
assert railencrypt(st='`j4z_:S', k=169) == '`j4z_:S'
|
|
||||||
|
|
||||||
def test_railencrypt_6(self):
|
|
||||||
assert railencrypt(st='? }qW^W', k=892) == '? }qW^W'
|
|
||||||
|
|
||||||
def test_railencrypt_7(self):
|
|
||||||
assert railencrypt(st='ns(ob!Pb', k=389) == 'ns(ob!Pb'
|
|
||||||
|
|
||||||
def test_railencrypt_8(self):
|
|
||||||
assert railencrypt(st='r$&=(', k=427) == 'r$&=('
|
|
||||||
|
|
||||||
def test_railencrypt_9(self):
|
|
||||||
assert railencrypt(st='2A/L~[%4', k=339) == '2A/L~[%4'
|
|
||||||
|
|
||||||
def test_railencrypt_10(self):
|
|
||||||
assert railencrypt(st='M>'', k=210) == 'M>''
|
|
||||||
|
|
||||||
def test_railencrypt_11(self):
|
|
||||||
assert railencrypt(st='=5]'146#', k=143) == '=5]'146#'
|
|
||||||
|
|
||||||
def test_railencrypt_12(self):
|
|
||||||
assert railencrypt(st='c?g!b', k=675) == 'c?g!b'
|
|
||||||
|
|
||||||
def test_railencrypt_13(self):
|
|
||||||
assert railencrypt(st='U"i-', k=547) == 'U"i-'
|
|
||||||
|
|
||||||
def test_railencrypt_14(self):
|
|
||||||
assert railencrypt(st='+e[', k=328) == '+e['
|
|
||||||
|
|
||||||
def test_railencrypt_15(self):
|
|
||||||
assert railencrypt(st='@ICWq0.[D', k=944) == '@ICWq0.[D'
|
|
||||||
|
|
||||||
def test_railencrypt_16(self):
|
|
||||||
assert railencrypt(st='~a}By', k=141) == '~a}By'
|
|
||||||
|
|
||||||
def test_railencrypt_17(self):
|
|
||||||
assert railencrypt(st='', k=574) == ''
|
|
||||||
|
|
||||||
def test_railencrypt_18(self):
|
|
||||||
assert railencrypt(st='#7oR+_$*', k=457) == '#7oR+_$*'
|
|
||||||
|
|
||||||
def test_railencrypt_19(self):
|
|
||||||
assert railencrypt(st='/c', k=900) == '/c'
|
|
||||||
|
|
||||||
def test_railencrypt_20(self):
|
|
||||||
assert railencrypt(st='r', k=492) == 'r'
|
|
||||||
|
|
||||||
def test_railencrypt_21(self):
|
|
||||||
assert railencrypt(st='vh]lR', k=242) == 'vh]lR'
|
|
||||||
|
|
||||||
def test_railencrypt_22(self):
|
|
||||||
assert railencrypt(st='**hH2', k=270) == '**hH2'
|
|
||||||
|
|
||||||
def test_railencrypt_23(self):
|
|
||||||
assert railencrypt(st=')>On.', k=70) == ')>On.'
|
|
||||||
|
|
||||||
def test_railencrypt_24(self):
|
|
||||||
assert railencrypt(st='djQ*5r_Uk', k=420) == 'djQ*5r_Uk'
|
|
||||||
|
|
||||||
def test_railencrypt_25(self):
|
|
||||||
assert railencrypt(st='{+xw', k=405) == '{+xw'
|
|
||||||
|
|
||||||
def test_railencrypt_26(self):
|
|
||||||
assert railencrypt(st='RGvx~r', k=976) == 'RGvx~r'
|
|
||||||
|
|
||||||
def test_railencrypt_27(self):
|
|
||||||
assert railencrypt(st='<$', k=154) == '<$'
|
|
||||||
|
|
||||||
def test_railencrypt_28(self):
|
|
||||||
assert railencrypt(st=')>On.', k=221) == ')>On.'
|
|
||||||
|
|
||||||
def test_railencrypt_29(self):
|
|
||||||
assert railencrypt(st='IH!=Y`l*', k=885) == 'IH!=Y`l*'
|
|
||||||
|
|
||||||
def test_railencrypt_30(self):
|
|
||||||
assert railencrypt(st='w::L', k=641) == 'w::L'
|
|
||||||
|
|
||||||
def test_railencrypt_31(self):
|
|
||||||
assert railencrypt(st=')>On.', k=885) == ')>On.'
|
|
||||||
|
|
||||||
def test_railencrypt_32(self):
|
|
||||||
assert railencrypt(st='!CIXRTgh', k=754) == '!CIXRTgh'
|
|
||||||
|
|
||||||
def test_railencrypt_33(self):
|
|
||||||
assert railencrypt(st='?NGYChStM', k=850) == '?NGYChStM'
|
|
||||||
|
|
||||||
def test_railencrypt_34(self):
|
|
||||||
assert railencrypt(st=' X$qR?', k=389) == ' X$qR?'
|
|
||||||
|
|
||||||
def test_railencrypt_35(self):
|
|
||||||
assert railencrypt(st='dA$PGkO', k=453) == 'dA$PGkO'
|
|
||||||
|
|
||||||
def test_railencrypt_36(self):
|
|
||||||
assert railencrypt(st=',gN', k=663) == ',gN'
|
|
||||||
|
|
||||||
def test_railencrypt_37(self):
|
|
||||||
assert railencrypt(st='', k=885) == ''
|
|
||||||
|
|
||||||
def test_railencrypt_38(self):
|
|
||||||
assert railencrypt(st='3kDF>S%/', k=816) == '3kDF>S%/'
|
|
||||||
|
|
||||||
def test_railencrypt_39(self):
|
|
||||||
assert railencrypt(st='h{I<H[%4', k=468) == 'h{I<H[%4'
|
|
||||||
|
|
||||||
def test_railencrypt_40(self):
|
|
||||||
assert railencrypt(st='Ac#@F', k=335) == 'Ac#@F'
|
|
||||||
|
|
||||||
def test_railencrypt_41(self):
|
|
||||||
assert railencrypt(st='pR9.T\F#', k=950) == 'pR9.T\F#'
|
|
||||||
|
|
||||||
def test_railencrypt_42(self):
|
|
||||||
assert railencrypt(st='dA$PGkO', k=898) == 'dA$PGkO'
|
|
||||||
|
|
||||||
def test_railencrypt_43(self):
|
|
||||||
assert railencrypt(st='MX[JC2*', k=146) == 'MX[JC2*'
|
|
||||||
|
|
||||||
def test_railencrypt_44(self):
|
|
||||||
assert railencrypt(st='kwVesxWq', k=126) == 'kwVesxWq'
|
|
||||||
|
|
||||||
def test_railencrypt_45(self):
|
|
||||||
assert railencrypt(st='So!D5q<s', k=687) == 'So!D5q<s'
|
|
||||||
|
|
||||||
def test_railencrypt_46(self):
|
|
||||||
assert railencrypt(st='BgG', k=452) == 'BgG'
|
|
||||||
|
|
||||||
def test_railencrypt_47(self):
|
|
||||||
assert railencrypt(st='#6U@a', k=986) == '#6U@a'
|
|
||||||
|
|
||||||
def test_railencrypt_48(self):
|
|
||||||
assert railencrypt(st='-O HB', k=853) == '-O HB'
|
|
||||||
|
|
||||||
def test_railencrypt_49(self):
|
|
||||||
assert railencrypt(st='tGr_xE_<', k=31) == 'tGr_xE_<'
|
|
||||||
|
|
||||||
def test_railencrypt_50(self):
|
|
||||||
assert railencrypt(st='', k=750) == ''
|
|
||||||
|
|
||||||
def test_railencrypt_51(self):
|
|
||||||
assert railencrypt(st='%;A <}gy?', k=968) == '%;A <}gy?'
|
|
||||||
|
|
||||||
def test_railencrypt_52(self):
|
|
||||||
assert railencrypt(st='=', k=577) == '='
|
|
||||||
|
|
||||||
def test_railencrypt_53(self):
|
|
||||||
assert railencrypt(st='!q)3r7i_', k=370) == '!q)3r7i_'
|
|
||||||
|
|
||||||
def test_railencrypt_54(self):
|
|
||||||
assert railencrypt(st='y"X', k=359) == 'y"X'
|
|
||||||
|
|
||||||
def test_railencrypt_55(self):
|
|
||||||
assert railencrypt(st='=os/W!ss', k=176) == '=os/W!ss'
|
|
||||||
|
|
||||||
def test_railencrypt_56(self):
|
|
||||||
assert railencrypt(st='-G;'k', k=652) == '-G;'k'
|
|
||||||
|
|
||||||
def test_railencrypt_57(self):
|
|
||||||
assert railencrypt(st='tP&LZgJ(p', k=753) == 'tP&LZgJ(p'
|
|
||||||
|
|
||||||
def test_railencrypt_58(self):
|
|
||||||
assert railencrypt(st='J3kaFe2c', k=94) == 'J3kaFe2c'
|
|
||||||
|
|
||||||
def test_railencrypt_59(self):
|
|
||||||
assert railencrypt(st='M"9&HYe', k=691) == 'M"9&HYe'
|
|
||||||
|
|
||||||
def test_railencrypt_60(self):
|
|
||||||
assert railencrypt(st='OF', k=697) == 'OF'
|
|
||||||
|
|
||||||
def test_railencrypt_61(self):
|
|
||||||
assert railencrypt(st='H@', k=918) == 'H@'
|
|
||||||
|
|
||||||
def test_railencrypt_62(self):
|
|
||||||
assert railencrypt(st='', k=880) == ''
|
|
||||||
|
|
||||||
def test_railencrypt_63(self):
|
|
||||||
assert railencrypt(st='3kDF>S%/', k=160) == '3kDF>S%/'
|
|
||||||
|
|
||||||
def test_railencrypt_64(self):
|
|
||||||
assert railencrypt(st='1A!>S', k=242) == '1A!>S'
|
|
||||||
|
|
||||||
def test_railencrypt_65(self):
|
|
||||||
assert railencrypt(st='zZ|;(j', k=159) == 'zZ|;(j'
|
|
||||||
|
|
||||||
def test_railencrypt_66(self):
|
|
||||||
assert railencrypt(st='T:', k=887) == 'T:'
|
|
||||||
|
|
||||||
def test_railencrypt_67(self):
|
|
||||||
assert railencrypt(st='tP&LZI', k=753) == 'tP&LZI'
|
|
||||||
|
|
||||||
def test_railencrypt_68(self):
|
|
||||||
assert railencrypt(st='', k=541) == ''
|
|
||||||
|
|
||||||
def test_railencrypt_69(self):
|
|
||||||
assert railencrypt(st='8p+S~< \', k=705) == '8p+S~< \'
|
|
||||||
|
|
||||||
def test_railencrypt_70(self):
|
|
||||||
assert railencrypt(st='!3V0]Es', k=502) == '!3V0]Es'
|
|
||||||
|
|
||||||
def test_railencrypt_71(self):
|
|
||||||
assert railencrypt(st='', k=255) == ''
|
|
||||||
|
|
||||||
def test_railencrypt_72(self):
|
|
||||||
assert railencrypt(st='z-woX#S*', k=664) == 'z-woX#S*'
|
|
||||||
|
|
||||||
def test_railencrypt_73(self):
|
|
||||||
assert railencrypt(st='b]Eb', k=721) == 'b]Eb'
|
|
||||||
|
|
||||||
def test_railencrypt_74(self):
|
|
||||||
assert railencrypt(st='`82?%]G=k', k=89) == '`82?%]G=k'
|
|
||||||
|
|
||||||
def test_railencrypt_75(self):
|
|
||||||
assert railencrypt(st='', k=533) == ''
|
|
||||||
|
|
||||||
def test_railencrypt_76(self):
|
|
||||||
assert railencrypt(st='Kd*', k=125) == 'Kd*'
|
|
||||||
|
|
||||||
def test_railencrypt_77(self):
|
|
||||||
assert railencrypt(st='gB}[Y!', k=137) == 'gB}[Y!'
|
|
||||||
|
|
||||||
def test_railencrypt_78(self):
|
|
||||||
assert railencrypt(st='G\uHOS', k=745) == 'G\uHOS'
|
|
||||||
|
|
||||||
def test_railencrypt_79(self):
|
|
||||||
assert railencrypt(st='5H>Eac', k=588) == '5H>Eac'
|
|
||||||
|
|
||||||
def test_railencrypt_80(self):
|
|
||||||
assert railencrypt(st='', k=506) == ''
|
|
||||||
|
|
||||||
def test_railencrypt_81(self):
|
|
||||||
assert railencrypt(st='2A/L~q', k=339) == '2A/L~q'
|
|
||||||
|
|
||||||
def test_railencrypt_82(self):
|
|
||||||
assert railencrypt(st='=D?*', k=548) == '=D?*'
|
|
||||||
|
|
||||||
def test_railencrypt_83(self):
|
|
||||||
assert railencrypt(st='wvG6lC=YR', k=201) == 'wvG6lC=YR'
|
|
||||||
|
|
||||||
def test_railencrypt_84(self):
|
|
||||||
assert railencrypt(st='!&=,S3H', k=662) == '!&=,S3H'
|
|
||||||
|
|
||||||
def test_railencrypt_85(self):
|
|
||||||
assert railencrypt(st='0LO\', k=948) == '0LO\'
|
|
||||||
|
|
||||||
def test_railencrypt_86(self):
|
|
||||||
assert railencrypt(st='?', k=276) == '?'
|
|
||||||
|
|
||||||
def test_railencrypt_87(self):
|
|
||||||
assert railencrypt(st=':W', k=741) == ':W'
|
|
||||||
|
|
||||||
def test_railencrypt_88(self):
|
|
||||||
assert railencrypt(st=';:H(XyM%(', k=816) == ';:H(XyM%('
|
|
||||||
|
|
||||||
def test_railencrypt_89(self):
|
|
||||||
assert railencrypt(st='UvOW='', k=330) == 'UvOW=''
|
|
||||||
|
|
||||||
def test_railencrypt_90(self):
|
|
||||||
assert railencrypt(st='^82?%]G=k', k=5) == '^k8=2G?]%'
|
|
||||||
|
|
||||||
def test_railencrypt_91(self):
|
|
||||||
assert railencrypt(st='rh', k=985) == 'rh'
|
|
||||||
|
|
||||||
def test_railencrypt_92(self):
|
|
||||||
assert railencrypt(st='o$NfGib0x', k=437) == 'o$NfGib0x'
|
|
||||||
|
|
||||||
def test_railencrypt_93(self):
|
|
||||||
assert railencrypt(st='{', k=661) == '{'
|
|
||||||
|
|
||||||
def test_railencrypt_94(self):
|
|
||||||
assert railencrypt(st='BgOT!e/E', k=452) == 'BgOT!e/E'
|
|
||||||
|
|
||||||
def test_railencrypt_95(self):
|
|
||||||
assert railencrypt(st='n4:j', k=62) == 'n4:j'
|
|
||||||
|
|
||||||
def test_railencrypt_96(self):
|
|
||||||
assert railencrypt(st='', k=772) == ''
|
|
||||||
|
|
||||||
def test_railencrypt_97(self):
|
|
||||||
assert railencrypt(st='U}I~pr7', k=291) == 'U}I~pr7'
|
|
||||||
|
|
||||||
def test_railencrypt_98(self):
|
|
||||||
assert railencrypt(st='}Bx&KQ[i{', k=51) == '}Bx&KQ[i{'
|
|
||||||
|
|
||||||
def test_railencrypt_99(self):
|
|
||||||
assert railencrypt(st='?Ij', k=361) == '?Ij'
|
|
||||||
|
|
||||||
def test_railencrypt_100(self):
|
|
||||||
assert railencrypt(st='\El#o*a;}', k=422) == '\El#o*a;}'
|
|
Reference in a new issue