import os import sys import json import itertools from param_list import * def getlabel(sub_list_element, level): label="" for l in range(level): label = label+sub_list_element[l]+"_" return label def MySort(sub_list, level): l=len(sub_list) for i in range(0,l): for j in range(0, l-i-1): if(getlabel(sub_list[j], level) > getlabel(sub_list[j+1], level)): tempo = sub_list[j] sub_list[j]= sub_list[j+1] sub_list[j+1]= tempo return sub_list def main() : param_length = len(param_list) param = [""]*param_length f=open("user_param.json", 'r') config_dict = json.load(f) f.close() f=open("default_param.json", 'r') def_config = json.load(f) f.close() default_config=[""]*param_length f=open("default_param.py", "w") for i in range(param_length): default_config[i] = str(def_config[0][param_list[i]]) f.write(param_list[i]+" = "+str(def_config[0][param_list[i]])+"\n") f.close() config_list=[] for config_set in config_dict: sub_list=[] for l in range(param_length): if param_list[l] in config_set: param[l]=config_set[param_list[l]].split(" ") for i in range(len(param[l])) : param[l][i] = [str(param[l][i])] else : param[l]=['_'] for l in range(len(param_list)): if not sub_list: sub_list = list(param[l]) else: tmp_sub_list = list(itertools.product(sub_list,list(param[l]))) sub_list=[] for i in range(len(tmp_sub_list)): sub_list.append(list(tmp_sub_list[i])) for i in range(len(sub_list)): sub_list[i] = list(itertools.chain(*sub_list[i])) for i in range(len(sub_list)): config_list.append(sub_list[i]) param=[""]*param_length config_list=MySort(config_list, param_length) for i in range(len(config_list)): print(config_list[i]) full_config_list=[[]]*len(config_list) for i in range(len(config_list)): full_config_list[i] = list(config_list[i]) for j in range(param_length): if full_config_list[i][j]=='_': full_config_list[i][j] = default_config[j] # print(full_config_list[i]) for i in range(len(config_list)): f=open("user_param.py."+repr(i), "w") for j in range(param_length): if not config_list[i][j] == "_": f.write(param_list[j]+" = "+config_list[i][j]+"\n") f.close() f=open("CMakeLists.txt", "w") f.write("##############################\n") f.write("# file generated by setup.py #\n") f.write("# DO NOT modify #\n") f.write("##############################\n\n") f.write("cmake_minimum_required(VERSION 2.8.12.2)\n\n") f.write("project(generic_testcase)\n\n") f.write("find_package(PythonInterp REQUIRED)\n\n") f.write("enable_testing()\n\n") dirpath = os.getcwd() foldername = os.path.basename(os.getcwd()) print(foldername) for x in range(len(config_list)): f.write("add_test( NAME "+foldername+"_config"+repr(x)+'\n') f.write(" COMMAND ${PYTHON_EXECUTABLE}\n") f.write(" ${CMAKE_CURRENT_BINARY_DIR}/run_test_"+repr(x)+".py\n") f.write(" "+foldername+"_config"+repr(x)+")\n\n") f.write("set_tests_properties("+foldername+"_config"+repr(x)+" PROPERTIES\n") f.write(" FAIL_REGULAR_EXPRESSION \"check.py failed;execution failed;failed;setup.sh failed; machine unknown\")\n\n") g=open("run_test_"+repr(x)+".py", "w") g.write("##############################\n") g.write("# file generated by setup.py #\n") g.write("# DO NOT modify #\n") g.write("##############################\n\n") g.write("import os\n") g.write("import sys\n") g.write("import subprocess\n") g.write("\ndef main():\n") g.write(" os.system(\'rm -f user_param.py\')\n") g.write(" os.system(\'cp user_param.py."+repr(x)+" user_param.py\')\n") g.write(" os.system(\'./run_sub_test.sh\')\n") g.write("if __name__== \"__main__\":\n") g.write(" main()\n") g.close() f.close() if __name__== "__main__": main()