[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 <noreply@anthropic.com>
Co-authored-by: Illia Silin <98187287+illsilin@users.noreply.github.com>
This commit is contained in:
Yaswanth Raparti
2026-03-27 06:34:12 +00:00
committed by assistant-librarian[bot]
parent 2f98c7bbef
commit e2470e837a

View File

@@ -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):