1 | import os |
---|
2 | import sys |
---|
3 | import json |
---|
4 | import itertools |
---|
5 | |
---|
6 | from param_list import * |
---|
7 | |
---|
8 | def getlabel(sub_list_element, level): |
---|
9 | label="" |
---|
10 | for l in range(level): |
---|
11 | label = label+sub_list_element[l]+"_" |
---|
12 | return label |
---|
13 | |
---|
14 | def MySort(sub_list, level): |
---|
15 | l=len(sub_list) |
---|
16 | for i in range(0,l): |
---|
17 | for j in range(0, l-i-1): |
---|
18 | if(getlabel(sub_list[j], level) > getlabel(sub_list[j+1], level)): |
---|
19 | tempo = sub_list[j] |
---|
20 | sub_list[j]= sub_list[j+1] |
---|
21 | sub_list[j+1]= tempo |
---|
22 | return sub_list |
---|
23 | |
---|
24 | def main() : |
---|
25 | |
---|
26 | param_length = len(param_list) |
---|
27 | param = [""]*param_length |
---|
28 | |
---|
29 | |
---|
30 | f=open("user_param.json", 'r') |
---|
31 | config_dict = json.load(f) |
---|
32 | f.close() |
---|
33 | |
---|
34 | f=open("default_param.json", 'r') |
---|
35 | def_config = json.load(f) |
---|
36 | f.close() |
---|
37 | |
---|
38 | default_config=[""]*param_length |
---|
39 | f=open("default_param.py", "w") |
---|
40 | for i in range(param_length): |
---|
41 | default_config[i] = str(def_config[0][param_list[i]]) |
---|
42 | f.write(param_list[i]+" = "+str(def_config[0][param_list[i]])+"\n") |
---|
43 | f.close() |
---|
44 | |
---|
45 | config_list=[] |
---|
46 | |
---|
47 | for config_set in config_dict: |
---|
48 | sub_list=[] |
---|
49 | for l in range(param_length): |
---|
50 | if param_list[l] in config_set: |
---|
51 | param[l]=config_set[param_list[l]].split(" ") |
---|
52 | for i in range(len(param[l])) : |
---|
53 | param[l][i] = [str(param[l][i])] |
---|
54 | else : |
---|
55 | param[l]=['_'] |
---|
56 | |
---|
57 | for l in range(len(param_list)): |
---|
58 | if not sub_list: |
---|
59 | sub_list = list(param[l]) |
---|
60 | else: |
---|
61 | tmp_sub_list = list(itertools.product(sub_list,list(param[l]))) |
---|
62 | sub_list=[] |
---|
63 | for i in range(len(tmp_sub_list)): |
---|
64 | sub_list.append(list(tmp_sub_list[i])) |
---|
65 | for i in range(len(sub_list)): |
---|
66 | sub_list[i] = list(itertools.chain(*sub_list[i])) |
---|
67 | |
---|
68 | for i in range(len(sub_list)): |
---|
69 | config_list.append(sub_list[i]) |
---|
70 | |
---|
71 | |
---|
72 | param=[""]*param_length |
---|
73 | |
---|
74 | config_list=MySort(config_list, param_length) |
---|
75 | |
---|
76 | |
---|
77 | for i in range(len(config_list)): |
---|
78 | print(config_list[i]) |
---|
79 | |
---|
80 | |
---|
81 | full_config_list=[[]]*len(config_list) |
---|
82 | |
---|
83 | for i in range(len(config_list)): |
---|
84 | full_config_list[i] = list(config_list[i]) |
---|
85 | for j in range(param_length): |
---|
86 | if full_config_list[i][j]=='_': |
---|
87 | full_config_list[i][j] = default_config[j] |
---|
88 | # print(full_config_list[i]) |
---|
89 | |
---|
90 | for i in range(len(config_list)): |
---|
91 | f=open("user_param.py."+repr(i), "w") |
---|
92 | for j in range(param_length): |
---|
93 | if not config_list[i][j] == "_": |
---|
94 | f.write(param_list[j]+" = "+config_list[i][j]+"\n") |
---|
95 | f.close() |
---|
96 | |
---|
97 | f=open("CMakeLists.txt", "w") |
---|
98 | f.write("##############################\n") |
---|
99 | f.write("# file generated by setup.py #\n") |
---|
100 | f.write("# DO NOT modify #\n") |
---|
101 | f.write("##############################\n\n") |
---|
102 | f.write("cmake_minimum_required(VERSION 2.8.12.2)\n\n") |
---|
103 | f.write("project(generic_testcase)\n\n") |
---|
104 | f.write("find_package(PythonInterp REQUIRED)\n\n") |
---|
105 | f.write("enable_testing()\n\n") |
---|
106 | dirpath = os.getcwd() |
---|
107 | foldername = os.path.basename(os.getcwd()) |
---|
108 | print(foldername) |
---|
109 | |
---|
110 | for x in range(len(config_list)): |
---|
111 | f.write("add_test( NAME "+foldername+"_config"+repr(x)+'\n') |
---|
112 | f.write(" COMMAND ${PYTHON_EXECUTABLE}\n") |
---|
113 | f.write(" ${CMAKE_CURRENT_BINARY_DIR}/run_test_"+repr(x)+".py\n") |
---|
114 | f.write(" "+foldername+"_config"+repr(x)+")\n\n") |
---|
115 | f.write("set_tests_properties("+foldername+"_config"+repr(x)+" PROPERTIES\n") |
---|
116 | f.write(" FAIL_REGULAR_EXPRESSION \"check.py failed;execution failed;failed;setup.sh failed; machine unknown\")\n\n") |
---|
117 | |
---|
118 | g=open("run_test_"+repr(x)+".py", "w") |
---|
119 | g.write("##############################\n") |
---|
120 | g.write("# file generated by setup.py #\n") |
---|
121 | g.write("# DO NOT modify #\n") |
---|
122 | g.write("##############################\n\n") |
---|
123 | g.write("import os\n") |
---|
124 | g.write("import sys\n") |
---|
125 | g.write("import subprocess\n") |
---|
126 | |
---|
127 | |
---|
128 | g.write("\ndef main():\n") |
---|
129 | g.write(" os.system(\'rm -f user_param.py\')\n") |
---|
130 | g.write(" os.system(\'cp user_param.py."+repr(x)+" user_param.py\')\n") |
---|
131 | g.write(" os.system(\'./run_sub_test.sh\')\n") |
---|
132 | g.write("if __name__== \"__main__\":\n") |
---|
133 | g.write(" main()\n") |
---|
134 | g.close() |
---|
135 | |
---|
136 | f.close() |
---|
137 | |
---|
138 | if __name__== "__main__": |
---|
139 | main() |
---|
140 | |
---|
141 | |
---|
142 | |
---|