[llvm] [AMDGPU][test]added unique and sort options for update_mc_test_check script (PR #111769)
Brox Chen via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 29 08:26:29 PDT 2024
================
@@ -298,23 +325,88 @@ def main():
else:
gen_prefix += getStdCheckLine(prefix, o, mc_mode)
- generated_prefixes.append(gen_prefix.rstrip("\n"))
+ generated_prefixes[input_line] = gen_prefix.rstrip("\n")
# write output
- prefix_id = 0
for input_info in ti.iterlines(output_lines):
input_line = input_info.line
- if isTestLine(input_line, mc_mode):
+ if input_line in testlines:
output_lines.append(input_line)
- output_lines.append(generated_prefixes[prefix_id])
- prefix_id += 1
+ output_lines.append(generated_prefixes[input_line])
elif should_add_line_to_output(input_line, prefix_set, mc_mode):
output_lines.append(input_line)
- elif input_line in ti.run_lines or input_line == "":
- output_lines.append(input_line)
+ if ti.args.unique or ti.args.sort:
+ # split with double newlines
+ test_units = "\n".join(output_lines).split("\n\n")
+
+ # select the key line for each test unit
+ test_dic = {}
+ for unit in test_units:
+ lines = unit.split("\n")
+ for l in lines:
+ # if contains multiple lines, use
+ # the first testline or runline as key
+ if isTestLine(l, mc_mode):
+ test_dic[unit] = l
+ break
+ elif isRunLine(l):
+ test_dic[unit] = l
+ break
+
+ # unique
+ if ti.args.unique:
+ new_test_units = []
+ written_lines = set()
+ for unit in test_units:
+ # if not testline/runline, we just add it
+ if unit not in test_dic:
+ new_test_units.append(unit)
+ else:
+ if test_dic[unit] in written_lines:
+ common.debug("Duplicated test skipped: ", unit)
+ continue
+ else:
+ written_lines.add(test_dic[unit])
+ new_test_units.append(unit)
+ test_units = new_test_units
+
+ # sort
+ if ti.args.sort:
+
+ def compare(l1, l2):
+ # get key string to be compared
+ if l1 in test_dic:
+ l1 = test_dic[l1]
+ else:
+ l1 = l1.split("\n")[0]
+ if l2 in test_dic:
+ l2 = test_dic[l2]
+ else:
+ l2 = l2.split("\n")[0]
+
+ isl1_runline = isRunLine(l1)
+ isl2_runline = isRunLine(l2)
+
+ if isl1_runline and not isl2_runline:
+ return -1
+ elif not isl1_runline and isl2_runline:
+ return 1
+ else:
+ if l1 < l2:
+ return -1
+ elif l1 > l2:
+ return 1
+ else:
+ return 0
+
+ test_units = sorted(test_units, key=functools.cmp_to_key(compare))
----------------
broxigarchen wrote:
Yup I think this can be simplified.
I thought I have to pass a comparator here but seems just a get key could work. Nice suggestion!
https://github.com/llvm/llvm-project/pull/111769
More information about the llvm-commits
mailing list