From e2470e837a63f76d37c168c3dc71d1b2e648ba26 Mon Sep 17 00:00:00 2001 From: Yaswanth Raparti <113389104+yraparti@users.noreply.github.com> Date: Fri, 27 Mar 2026 06:34:12 +0000 Subject: [PATCH] [rocm-libraries] ROCm/rocm-libraries#5880 (commit a6b6c05) [CK][CK_TILE] Fix CTest parsing to handle all test number formats (#5880) ## Motivation Fix a bug in the smart-build --ctest-only filter that was incorrectly excluding tests with numbers less than 100. ## Technical Details The issue was caused by CTest formatting test numbers with variable spacing based on the number of digits: - "Test `#1`: name (3 spaces for tests 1-9)" - "Test `#79`: name (2 spaces for tests 10-99)" - "Test `#100`: name (1 space for tests 100+)" The previous code used `line.strip().startswith("Test #")` which only matched tests with a single space (i.e., test numbers >= 100). This caused tests like ck_tile_unit_sequence (Test #79) to be excluded from smart-build test selection, resulting in CTest failures when the binary wasn't built. Solution: Replace string matching with a regex pattern that handles all spacing variations: r'^\s*Test\s+#\d+:\s*(.+)$' ## Test Plan Tested with test numbers from 1 to 12345. ## Test Result - Before: 48 tests selected (only tests #100+) - After: 146 tests selected (all CTest-registered tests) ## Submission Checklist - [x ] Look over the contributing guidelines at https://github.com/ROCm/ROCm/blob/develop/CONTRIBUTING.md#pull-requests. Co-authored-by: Claude Opus 4.6 Co-authored-by: Illia Silin <98187287+illsilin@users.noreply.github.com> --- .../src/selective_test_filter.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/script/dependency-parser/src/selective_test_filter.py b/script/dependency-parser/src/selective_test_filter.py index 329fdea518..551ed06eb0 100644 --- a/script/dependency-parser/src/selective_test_filter.py +++ b/script/dependency-parser/src/selective_test_filter.py @@ -29,6 +29,7 @@ import sys import subprocess import json import os +import re def get_changed_files(ref1, ref2, project: str = None): @@ -110,12 +111,18 @@ def get_ctest_registered_tests(build_dir=None): return None tests = set() + # CTest formats test numbers with variable spacing: + # Test #1: name (3 spaces for 1-9) + # Test #10: name (2 spaces for 10-99) + # Test #100: name (1 space for 100+) + # Use regex to match all formats + test_pattern = re.compile(r'^\s*Test\s+#\d+:\s*(.+)$') + for line in result.stdout.splitlines(): - if line.strip().startswith("Test #"): - parts = line.split(":", 1) - if len(parts) == 2: - test_name = parts[1].strip() - tests.add(test_name) + match = test_pattern.match(line) + if match: + test_name = match.group(1).strip() + tests.add(test_name) return tests except (subprocess.TimeoutExpired, FileNotFoundError, Exception):