mirror of
https://github.com/ROCm/composable_kernel.git
synced 2026-05-14 02:02:46 +00:00
[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 <noreply@anthropic.com>
Co-authored-by: Illia Silin <98187287+illsilin@users.noreply.github.com>
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user