[igt-dev] [PATCH i-g-t v5 7/7] scripts/test_list.py: optimize check regex
Mauro Carvalho Chehab
mauro.chehab at linux.intel.com
Mon Jul 10 11:53:54 UTC 2023
From: Mauro Carvalho Chehab <mchehab at kernel.org>
Running re.sub() for an already compiled regex makes it recompile
again. Change the logic to use the right syntax. While here, also use
rstrip() to remove \n at the end of read files.
Before:
$ time ./scripts/igt_doc.py --config tests/i915/i915_*json --check --igt build/
real 0m1.492s
user 0m1.457s
sys 0m0.030s
After:
$ time ./scripts/igt_doc.py --config tests/i915/i915_*json --check --igt build/
real 0m0.492s
user 0m0.473s
sys 0m0.017s
It is now 3 times faster (measured for i915 driver, which has
more IGT tests).
Signed-off-by: Mauro Carvalho Chehab <mchehab at kernel.org>
---
scripts/test_list.py | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/scripts/test_list.py b/scripts/test_list.py
index 2c1a6f230fb5..19ed5e5467f5 100755
--- a/scripts/test_list.py
+++ b/scripts/test_list.py
@@ -401,10 +401,10 @@ class TestList:
for filter_field, regex in self.filters.items():
if filter_field in subtest:
- if not re.match(regex, subtest[filter_field]):
+ if not regex.match(subtest[filter_field]):
return True
elif filter_field in test:
- if not re.match(regex, test[filter_field]):
+ if not regex.match(test[filter_field]):
return True
else:
return field_not_found_value
@@ -919,7 +919,7 @@ class TestList:
with open(fname, 'r', encoding='utf8') as handle:
for line in handle:
- tests.append(line)
+ tests.append(line.rstrip("\n"))
return sorted(tests)
@@ -938,9 +938,11 @@ class TestList:
doc_subtests = set()
+ args_regex = re.compile(r'\<[^\>]+\>')
+
for subtest in self.get_subtests()[""]:
subtest = "@".join(subtest.split("@")[:3])
- subtest = re.sub(r'\<[^\>]+\>', r'\\d+', subtest)
+ subtest = args_regex.sub(r'\\d+', subtest)
doc_subtests.add(subtest)
doc_subtests = list(sorted(doc_subtests))
@@ -957,14 +959,14 @@ class TestList:
for doc_test in doc_subtests:
if test_regex != r"":
test_regex += r"|"
- test_regex += r'^' + doc_test + r'$'
+ test_regex += doc_test
- test_regex = re.compile(test_regex)
+ test_regex = re.compile(r'^(' + test_regex + r')$')
for doc_test in doc_subtests:
found = False
for run_test in run_subtests:
- if re.match(test_regex, run_test):
+ if test_regex.match(run_test):
found = True
break
if not found:
@@ -972,7 +974,7 @@ class TestList:
for run_test in run_subtests:
found = False
- if re.match(test_regex, run_test):
+ if test_regex.match(run_test):
found = True
if not found:
run_missing.append(run_test)
@@ -1101,7 +1103,7 @@ class TestList:
continue
# It is a known section. Parse its contents
- match = re.match(field_re, file_line)
+ match = field_re.match(file_line)
if match:
current_field = self.field_list[match.group(1).lower()]
match_val = match.group(2)
@@ -1198,7 +1200,7 @@ class TestList:
self.doc[current_test]["arg"][arg_ref][cur_arg][cur_arg_element] += match_val
continue
- re.sub(r"\n$","", file_line)
+ file_line.rstrip(r"\n")
sys.exit(f"{fname}:{file_ln + 1}: Error: unrecognized line. Need to add field at %s?\n\t==> %s" %
(self.config_fname, file_line))
--
2.40.1
More information about the igt-dev
mailing list