Skip to content

feat(rocprim) Replace index-based test filters in rtest.xml by names - #11453

Merged
amd-hsong merged 24 commits into
developfrom
users/amd-hsong/rocprim_replace_rtest_indices
Sep 18, 2026
Merged

amd-hsong merged 24 commits into
developfrom
users/amd-hsong/rocprim_replace_rtest_indices

Conversation

@amd-hsong

Copy link
Copy Markdown
Contributor

Motivation

This PR replaces index-based test filters in rocPRIM's rtest.xml by names.

JIRA ID: AIPRIMS-221

Technical Details

Using numerical indices for test filters has consistency issues when test cases are removed/added/re-ordered as they won't refer to the same tests anymore. To remove/replace these indices, two mechanisms are used:

Mechanism A — full-range collapse to a wildcard (no source change)

When a filter enumerates the entire instantiation range of a suite/test, the whole enumeration is replaced with a single * wildcard. This is valid only when the enumerated indices equal the complete instantiation set.

Example: the Select large-input test has 5 parameter values (0..4), and SMOKE selected all of them for both test methods:

# before — 10 numeric tokens
RocprimDeviceSelectLargeInputFlaggedTest/*.LargeInputFlagged/0
RocprimDeviceSelectLargeInputFlaggedTest/*.LargeInputFlagged/1
... /2 /3 /4
RocprimDeviceSelectLargeInputFlaggedTest/*.LargeInputUnique/0
... /1 /2 /3 /4

# after — 2 wildcards, no source edit
RocprimDeviceSelectLargeInputFlaggedTest/*.LargeInputFlagged/*
RocprimDeviceSelectLargeInputFlaggedTest/*.LargeInputUnique/*

The same mechanism collapses full typed ranges elsewhere, e.g. RocprimDeviceRadixSort/0..N.SortKeysRocprimDeviceRadixSort/*.SortKeys.

Mechanism B — name generator for partial selection (source change)

When a filter selects a subset of a suite's instantiations, the index cannot simply be dropped. Instead we give each instantiation a stable, attribute-derived name and filter on that name.

B1 — typed suites (TYPED_TEST_SUITE). A generator functor derives a readable name from the type parameters and is passed as the suite's name generator; the filter then references the name instead of the position. Example (warp-reduce family):

# before: 489 numeric patterns (SMOKE) enumerating type positions
WarpReduceTestsIntegral/0.ReduceSum* : WarpReduceTestsIntegral/1.* : ...

# after: names derived from warp_params<int,4u,1u> -> "Int_w4_i1"
WarpReduceTestsIntegral/*
  -WarpReduceTestsIntegral/Int_w4_i1.ReduceSum : -WarpReduceTestsIntegral/Int_w4_i1.ReduceSumValid

B2 — value-parameterized suites (INSTANTIATE_TEST_SUITE_P). A free naming function is supplied as the 4th argument of INSTANTIATE_TEST_SUITE_P; it maps each TestParamInfo to a [A-Za-z0-9_]-safe name. Example (partition large-input) — the param is std::pair<size_t /*size*/, bool /*use_graphs*/>:

INSTANTIATE_TEST_SUITE_P(
    RocprimDevicePartitionLargeInputTest,
    RocprimDevicePartitionLargeInputTests,
    ::testing::Values(std::make_pair(2, false),      // -> Size2
                      std::make_pair(2048, false),   // -> Size2048
                      std::make_pair(38713, false),  // -> Size38713
                      std::make_pair(38713, true)),  // -> Size38713Graphs
    [](const ::testing::TestParamInfo<RocprimDevicePartitionLargeInputTests::ParamType>& info)
    {
        std::string name = "Size" + std::to_string(std::get<0>(info.param));
        if(std::get<1>(info.param))
            name += "Graphs";
        return name;
    });
# before                                                    # after
.../LargeInputPartition/0            ->  .../LargeInputPartition/Size2
.../LargeInputPartition/1            ->  .../LargeInputPartition/Size2048
.../LargeInputPartitionThreeWay/1    ->  .../LargeInputPartitionThreeWay/Size2048
.../LargeInputPartitionThreeWay/2    ->  .../LargeInputPartitionThreeWay/Size38713
.../LargeInputPartitionThreeWay/3    ->  .../LargeInputPartitionThreeWay/Size38713Graphs
.../LargeInputPartitionTwoWay/1      ->  .../LargeInputPartitionTwoWay/Size2048

Residual indices

A small set of numeric indices is intentionally kept, because they cannot be replaced by any type-derived name.

The name generator derives an instance's name from its C++ type. When two instantiations inside one suite resolve to the identical type, both would generate the identical name — and GoogleTest requires instance names to be unique within a suite (a duplicate name is a hard build error). So no type-derived name can distinguish them; only the numeric position can. This is a blocker only when a filter treats the duplicates differently (selects one but not the other, or excludes different test methods from each).

Example — RocprimDeviceTransformTests index 5 vs index 9. On the LP64 platform the type list contains both unsigned long and uint64_t, which are the same underlying type, so both instantiations print byte-for-byte identically:

index 5:  DeviceTransformParams<unsigned long, unsigned long, false, 4294967295u, false>
index 9:  DeviceTransformParams<unsigned long, unsigned long, false, 4294967295u, false>

A generator would emit the same name for both (build failure), and the filters select them differently — so these tokens stay numeric. The below table shows all the residual indices in rtest.xml after the changes of this PR:

Suite (as it appears in filters) Indices still referenced Reason (same-type duplicate)
RocprimDeviceScanTests / DeviceScanTests / ScanTests 0,1..31 (per var) idx 25 == idx 28 both custom_type<int,int>; SMOKE_OLD excludes different test methods from each
RocprimDeviceTransformTests / TransformTests / DeviceTransformTests 0,3,4,7,8,9,11,12,15 unsigned long == uint64_t (idx 5 == idx 9)
TypedRadixKeyCodecTest 0..14 int8_t==signed char, int16_t==short, uint16_t==unsigned short
RocprimCountingIteratorTests 0..3 unsigned long == size_t
RocprimDeviceNthelementTests 15 signed char == int8_t

Everything else that was type-derivable has been converted.

Test Plan

  1. Make sure the existing test filters in test_categories.yaml continue working as before;

  2. Test filters in rtest.xml refer to exactly the same set as before the changes, i.e.,

python3 rtest.py -t smoke

runs the same set of tests as before. Same for -t extended and -t regression as well.

Test Result

Confirmed test filters in test_categories.yaml and rtest.xml stay exactly the same.

Submission Checklist

@amd-hsong
amd-hsong requested a review from a team as a code owner August 28, 2026 22:16
@therock-pr-bot

therock-pr-bot Bot commented Aug 28, 2026

Copy link
Copy Markdown

✅ All Checks Passed — Ready for Review

Check Status Details
📝 PR Description ✅ Pass
Forbidden Files ✅ Pass
🧪 Unit Test ✅ Pass PR does not contain code files — Unit Test auto-passed
🔎 pre-commit ✅ Pass
🚫 Draft PR 🔜 To Be Enabled
🚩 Feature Flag 🔜 To Be Enabled
📊 Code Coverage 🔜 To Be Enabled
🤖 therock-pr-bot ✅ Pass

🎉 All checks passed! This PR is ready for review.

📖 Need help? See the Policy FAQ for details on every check and how to fix failures.

🙋 Wish to Override Policy?

@therock-pr-bot

Copy link
Copy Markdown

🎉 All checks passed! This PR is ready for review.

@stanleytsang-amd

Copy link
Copy Markdown
Contributor

@amd-hsong There are build failures in CI:

[rocPRIM_tests] In file included from C:/home/runner/_work/rocm-libraries/rocm-libraries/external-rocm-libraries/projects/rocprim/test/rocprim/test_thread_algos.cpp:38:
[rocPRIM_tests] C:/home/runner/_work/rocm-libraries/rocm-libraries/external-rocm-libraries/projects/rocprim/test/rocprim\test_utils_types.hpp:345:23: error: static assertion failed due to requirement 'dependent_false<common::custom_type<unsigned long long, unsigned long long, true>>::value': type_tag: add a case for this type
[rocPRIM_tests]   345 |         static_assert(dependent_false<T>::value, "type_tag: add a case for this type");
[rocPRIM_tests]       |                       ^~~~~~~~~~~~~~~~~~~~~~~~~
[rocPRIM_tests] C:/home/runner/_work/rocm-libraries/rocm-libraries/external-rocm-libraries/projects/rocprim/test/rocprim/test_thread_algos.cpp:91:16: note: in instantiation of function template specialization 'type_tag<common::custom_type<unsigned long long, unsigned long long, true>>' requested here
[rocPRIM_tests]    91 |         return type_tag<typename Params::type>();
[rocPRIM_tests]       |                ^
[rocPRIM_tests] B:/build/third-party/googletest/dist/include\gtest/internal/gtest-internal.h:668:45: note: in instantiation of function template specialization 'RocprimThreadOperationTestsNameGenerator::GetName<params<common::custom_type<unsigned long long, unsigned long long, true>>>' requested here
[rocPRIM_tests]   668 |   result->push_back(NameGenerator::template GetName<typename Types::Head>(i));
[rocPRIM_tests]       |                                             ^
[rocPRIM_tests] B:/build/third-party/googletest/dist/include\gtest/internal/gtest-internal.h:669:3: note: in instantiation of function template specialization 'testing::internal::GenerateNamesRecursively<RocprimThreadOperationTestsNameGenerator, testing::internal::Types<params<common::custom_type<unsigned long long, unsigned long long, true>>, params<common::custom_type<double, double, true>>, params<unsigned __int128>>>' requested here
[rocPRIM_tests]   669 |   GenerateNamesRecursively<NameGenerator>(typename Types::Tail(), result,

@amd-hsong

Copy link
Copy Markdown
Contributor Author

@stanleytsang-amd The Windows build failure has been fixed.

Comment thread projects/rocprim/test/rocprim/test_device_scan.cpp
Comment thread projects/rocprim/test/rocprim/test_device_segmented_scan.cpp
Song and others added 21 commits September 9, 2026 15:19
…generators

The four GTEST_FILTER vars in rtest.xml selected typed tests by numeric
type-list index (e.g. *Tests/16*), which silently retarget a different type
whenever a TYPED_TEST_SUITE type list is added to, removed from, or reordered.
Mirror the rocRAND fix (#11000): give the warp_/block_
typed suites stable, type-derived names and filter by name, selecting exactly
the same set of test cases as before.

- test_utils_types.hpp: make typed_test_suite_def variadic to forward an
  optional 4th name-generator arg to TYPED_TEST_SUITE; add type_tag<T>() and
  warp/block/vector/class param name generators.
- 13 warp_/block_ suites: pass the matching name generator.
- rtest.xml: rewrite SMOKE/SMOKE_OLD/REGRESSION/EXTENDED to name-based
  patterns, verified to expand to the identical selection over the built
  test list.

Device value-param suites remain index-based (follow-up). test_categories.yaml
is unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
… rtest filters

Add type-derived TYPED_TEST_SUITE name generators for RocprimDeviceSelectTests,
RocprimDeviceBinarySearch and RocprimDeviceRunLengthEncode so their rtest.xml
filters select by stable name instead of instantiation index. Extends the
shared type_tag<> with `unsigned long`. Selection is byte-for-byte equivalent
across all four filter sets (smoke, smoke_old, regression, extended);
test_categories.yaml is untouched and its CustomHugeType1024Int name preserved.

Phase 3b batch 1.
Add name generators for RocprimDeviceMergeTests and
RocprimDeviceSegmentedScan so their rtest.xml filters reference tests by
type-derived names instead of numeric instantiation indices. Extend
type_tag with char, long long, custom_short2, and custom_large.
Verified selecting the identical test set across all four filter vars.

Co-Authored-By: Claude <noreply@anthropic.com>
…tch 3)

Add input-type name generators for RocprimConstantIteratorTests and
RocprimTransformIteratorTests. RocprimCountingIteratorTests is left
indexed: its unsigned long and size_t instantiations are the same type
under LP64, so no type-derived name can distinguish them.
Verified identical selection across all four filter vars.

Co-Authored-By: Claude <noreply@anthropic.com>
… (batch 4)

Add name generators for RocprimDeviceUniqueByKeyTests (key/value +
flags), RocprimIntrinsicsTests (element type, with local custom types),
and RocprimThreadTests (block dimensions). Extend type_tag with
custom_huge_type<1024, int>. Verified identical selection across all four
filter vars.

Co-Authored-By: Claude <noreply@anthropic.com>
Add a config-encoding name generator for RocprimDeviceSegmentedReduce
(input/output type + block-reduce algorithm + init/segment lengths +
identity/graphs flags). use_default_config disambiguates the
default-algorithm instantiation, whose enum value aliases using_warp_reduce.
Verified identical selection across all four filter vars.

Co-Authored-By: Claude <noreply@anthropic.com>
Add a config-encoding name generator for RocprimDeviceReduceTests
(input/output type + block-reduce algorithm + size limit + identity/graphs/
deterministic flags) and expose the deterministic template parameter as a
struct member so instantiations differing only in determinism are namable.
Verified identical selection across all four filter vars (exact name-level).

Co-Authored-By: Claude <noreply@anthropic.com>
Add name generators for RocprimDeviceScanFutureTests (input/output type +
flags, with a local tag for custom_test_array_type) and
RocprimDevicePartitionTests (input/output type + identity/graphs). Extend
type_tag with custom_type<long long, long long, true>. RocprimDeviceScanTests
stays indexed: indices 25 and 28 are identical instantiations that
SMOKE_TEST_OLD excludes different test methods from, so no single name can
reproduce the selection. Verified identical selection (exact name-level).

Co-Authored-By: Claude <noreply@anthropic.com>
…atch 8)

Add config-encoding name generators for RocprimDeviceReduceByKey
(key/value type + segment lengths + identity/graphs/deterministic) and
RocprimDeviceBatchMemcpyTests (value/size type + memcpy-vs-copy, shuffled,
buffer count, max size, indirect). Both handle their file-local custom types
locally. Verified identical selection (exact name-level).

Co-Authored-By: Claude <noreply@anthropic.com>
Add name generators for RocprimDeviceAdjacentDifferenceTests (input/output
type + left/right + api_variant + config/identity/graphs/indirect) and its
Large variant (left/right + api_variant + graphs). This suite's type list
drifted from the pre-migration golden, so selection was verified against the
committed filters on the current build (the tests that run today).

Co-Authored-By: Claude <noreply@anthropic.com>
Add config-encoding name generators for all four histogram suites
(Even/Range/MultiEven/MultiRange), encoding sample type, bin/level/channel
parameters, level/counter types, and graph/indirect flags. Verified
identical selection across all four filter vars (exact name-level).

Co-Authored-By: Claude <noreply@anthropic.com>
Add a name generator for RocprimDeviceSortTests (key/value type + graphs/
indirect/config flags), with local tags for its custom key types
(custom_type_copyable, custom_float_type, custom_test_array_type,
custom_huge_type<2048,float>). Verified identical selection (exact name-level).

Co-Authored-By: Claude <noreply@anthropic.com>
Add a name generator for RocprimDevicePartialSortTests (cv-stripped key
type + config/decomposer/graphs/indirect flags), with local tags for its
custom key types. RocprimDeviceNthelementTests stays indexed: its signed
char and int8_t instantiations are the same type, so no type-derived name
can distinguish them. Verified identical selection (exact name-level).

Co-Authored-By: Claude <noreply@anthropic.com>
…(batch 13)

Add name generators for RocprimThreadOperationTests (element type),
RocprimLookbackReproducibilityTests (input type), and
HipcubBlockRunLengthDecodeTest (item/length type + block/run/decode sizes).
Extend type_tag with custom_type<unsigned long, unsigned long, true>.
Verified identical selection (exact name-level).

Co-Authored-By: Claude <noreply@anthropic.com>
… 14)

Add name generators for WarpLoadTest and WarpStoreTest (type + items/warp
size + method), and WarpExchangeTest/WarpExchangeScatterTest (type +
items/warp size + exchange op). Extend type_tag with float2. WarpExchange's
type list drifted from the pre-migration golden, so selection was verified
against the committed filters on the current build.

Co-Authored-By: Claude <noreply@anthropic.com>
Wire the existing class_params_name_generator into the block_load_store
stamped suites (RocprimBlockLoadStoreClassTests First/Second/ThirdPart) by
passing it as the name-generator argument of typed_test_suite_def. Names
encode element type, load/store method, block size, and items per thread.
Verified identical selection (exact name-level).

Co-Authored-By: Claude <noreply@anthropic.com>
WarpExchangeTest has 55 instantiations (indices 0-54); the /55 reference
was left over from a since-removed type and matched no test on the current
build. It was also redundant with the WarpExchangeTest/* wildcard in the
same filter, so removing it leaves selection unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
Remove the two remaining value-parameterized index groups in SMOKE_TEST.
Add a value-param name generator to RocprimDevicePartitionLargeInputTest
(/0..3 -> /Size2,/Size2048,/Size38713,/Size38713Graphs) and collapse the
full-range RocprimDeviceSelectLargeInputFlaggedTest tokens to wildcards.
Selection is exactly equivalent (verified per-suite on gfx942); test
methods and test_categories.yaml are unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
The RocprimDeviceAdjacentDifferenceTests name generator omitted the
config type, so two pairs of distinct instantiations collided on one
name: default_config (idx0) with custom_size_limit_config<64> (idx16),
and custom_size_limit_config<8192> (idx17) with <10240> (idx18). Under a
"*" filter GoogleTest aborts with "same test fixture class"; under the
SMOKE_OLD "Int_Int_Left_NoAlias.*" token it over-selected idx16.

Encode the size-limit configs as _Sl64/_Sl8192/_Sl10240 tags;
default_config stays suffix-free so Int_Int_Left_NoAlias still resolves
to idx0 and no rtest.xml change is needed.

Co-Authored-By: Claude <noreply@anthropic.com>
Both name generators omitted a distinguishing field, so a future
same-type instantiation would collide on one name (a runtime fatal plus
silent filter mis-selection, as seen in adjacent_difference). Encode the
missing fields:
- binary_search: append _Cfg when config is use_custom_config.
- segmented_scan: append _S<min>_<max> segment-length range.

The renamed instantiations are referenced by rtest.xml, so the matching
SMOKE_TEST_OLD/EXTENDED_TEST tokens are updated in lockstep. Verified
per-binary that all four filter vars select the identical (suite,
position, method) set before and after (test_categories.yaml untouched).

Co-Authored-By: Claude <noreply@anthropic.com>
@amd-hsong
amd-hsong force-pushed the users/amd-hsong/rocprim_replace_rtest_indices branch from e85ffd8 to 16758b0 Compare September 9, 2026 19:20

@amd-jmahovsky amd-jmahovsky left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One question.

Comment thread projects/rocprim/test/rocprim/test_device_partial_sort.cpp Outdated

@amd-jmahovsky amd-jmahovsky left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@amd-hsong
amd-hsong merged commit 358f118 into develop Sep 18, 2026
122 checks passed
@amd-hsong
amd-hsong deleted the users/amd-hsong/rocprim_replace_rtest_indices branch September 18, 2026 22:22
assistant-librarian Bot pushed a commit to ROCm/rocPRIM that referenced this pull request Sep 18, 2026
feat(rocprim) Replace index-based test filters in rtest.xml
 by names (#11453)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

## Motivation

<!-- Explain the purpose of this PR and the goals it aims to achieve.
-->

This PR replaces index-based test filters in rocPRIM's **rtest.xml** by
names.

JIRA ID: AIPRIMS-221

## Technical Details

<!-- Explain the changes along with any relevant GitHub links. -->

Using numerical indices for test filters has consistency issues when
test cases are removed/added/re-ordered as they won't refer to the same
tests anymore. To remove/replace these indices, two mechanisms are used:

### Mechanism A — full-range collapse to a wildcard (no source change)

When a filter enumerates the **entire** instantiation range of a
suite/test, the whole enumeration is replaced with a single `*`
wildcard. This is valid only when the enumerated indices equal the
complete instantiation set.

**Example:** the `Select` large-input test has 5 parameter values
(`0..4`), and SMOKE selected all of them for both test methods:

```
# before — 10 numeric tokens
RocprimDeviceSelectLargeInputFlaggedTest/*.LargeInputFlagged/0
RocprimDeviceSelectLargeInputFlaggedTest/*.LargeInputFlagged/1
... /2 /3 /4
RocprimDeviceSelectLargeInputFlaggedTest/*.LargeInputUnique/0
... /1 /2 /3 /4

# after — 2 wildcards, no source edit
RocprimDeviceSelectLargeInputFlaggedTest/*.LargeInputFlagged/*
RocprimDeviceSelectLargeInputFlaggedTest/*.LargeInputUnique/*
```

The same mechanism collapses full typed ranges elsewhere, e.g.
`RocprimDeviceRadixSort/0..N.SortKeys` →
`RocprimDeviceRadixSort/*.SortKeys`.

### Mechanism B — name generator for partial selection (source change)

When a filter selects a **subset** of a suite's instantiations, the
index cannot simply be dropped. Instead we give each instantiation a
stable, attribute-derived name and filter on that name.

**B1 — typed suites (`TYPED_TEST_SUITE`).** A generator functor derives
a readable name from the type parameters and is passed as the suite's
name generator; the filter then references the name instead of the
position. Example (warp-reduce family):

```
# before: 489 numeric patterns (SMOKE) enumerating type positions
WarpReduceTestsIntegral/0.ReduceSum* : WarpReduceTestsIntegral/1.* : ...

# after: names derived from warp_params<int,4u,1u> -> "Int_w4_i1"
WarpReduceTestsIntegral/*
  -WarpReduceTestsIntegral/Int_w4_i1.ReduceSum : -WarpReduceTestsIntegral/Int_w4_i1.ReduceSumValid
```

**B2 — value-parameterized suites (`INSTANTIATE_TEST_SUITE_P`).** A free
naming function is supplied as the 4th argument of
`INSTANTIATE_TEST_SUITE_P`; it maps each `TestParamInfo` to a
`[A-Za-z0-9_]`-safe name. Example (partition large-input) — the param is
`std::pair<size_t /*size*/, bool /*use_graphs*/>`:

```cpp
INSTANTIATE_TEST_SUITE_P(
    RocprimDevicePartitionLargeInputTest,
    RocprimDevicePartitionLargeInputTests,
    ::testing::Values(std::make_pair(2, false),      // -> Size2
                      std::make_pair(2048, false),   // -> Size2048
                      std::make_pair(38713, false),  // -> Size38713
                      std::make_pair(38713, true)),  // -> Size38713Graphs
    [](const ::testing::TestParamInfo<RocprimDevicePartitionLargeInputTests::ParamType>& info)
    {
        std::string name = "Size" + std::to_string(std::get<0>(info.param));
        if(std::get<1>(info.param))
            name += "Graphs";
        return name;
    });
```
```
# before                                                    # after
.../LargeInputPartition/0            ->  .../LargeInputPartition/Size2
.../LargeInputPartition/1            ->  .../LargeInputPartition/Size2048
.../LargeInputPartitionThreeWay/1    ->  .../LargeInputPartitionThreeWay/Size2048
.../LargeInputPartitionThreeWay/2    ->  .../LargeInputPartitionThreeWay/Size38713
.../LargeInputPartitionThreeWay/3    ->  .../LargeInputPartitionThreeWay/Size38713Graphs
.../LargeInputPartitionTwoWay/1      ->  .../LargeInputPartitionTwoWay/Size2048
```

### Residual indices

A small set of numeric indices is intentionally kept, because they
cannot be replaced by any type-derived name.

The name generator derives an instance's name from its C++ type. When
two instantiations inside one suite resolve to the **identical** type,
both would generate the **identical** name — and GoogleTest requires
instance names to be unique within a suite (a duplicate name is a hard
build error). So no type-derived name can distinguish them; only the
numeric position can. This is a blocker **only** when a filter treats
the duplicates differently (selects one but not the other, or excludes
different test methods from each).

**Example — `RocprimDeviceTransformTests` index 5 vs index 9.** On the
LP64 platform the type list contains both `unsigned long` and
`uint64_t`, which are the same underlying type, so both instantiations
print byte-for-byte identically:

```
index 5:  DeviceTransformParams<unsigned long, unsigned long, false, 4294967295u, false>
index 9:  DeviceTransformParams<unsigned long, unsigned long, false, 4294967295u, false>
```

A generator would emit the same name for both (build failure), and the
filters select them differently — so these tokens stay numeric. The
below table shows all the residual indices in `rtest.xml` after the
changes of this PR:

| Suite (as it appears in filters) | Indices still referenced | Reason
(same-type duplicate) |
|---|---|---|
| `RocprimDeviceScanTests` / `DeviceScanTests` / `ScanTests` | `0,1..31`
(per var) | idx 25 == idx 28 both `custom_type<int,int>`; SMOKE_OLD
excludes *different* test methods from each |
| `RocprimDeviceTransformTests` / `TransformTests` /
`DeviceTransformTests` | `0,3,4,7,8,9,11,12,15` | `unsigned long` ==
`uint64_t` (idx 5 == idx 9) |
| `TypedRadixKeyCodecTest` | `0..14` | `int8_t`==`signed char`,
`int16_t`==`short`, `uint16_t`==`unsigned short` |
| `RocprimCountingIteratorTests` | `0..3` | `unsigned long` == `size_t`
|
| `RocprimDeviceNthelementTests` | `15` | `signed char` == `int8_t` |

Everything else that was type-derivable has been converted.

## Test Plan

<!-- Explain any relevant testing done to verify this PR. -->

1. Make sure the existing test filters in `test_categories.yaml`
continue working as before;

2. Test filters in rtest.xml refer to **exactly** the same set as before
the changes, i.e.,
```
python3 rtest.py -t smoke
```
runs the same set of tests as before. Same for `-t extended` and `-t
regression` as well.

## Test Result

<!-- Briefly summarize test outcomes. -->

Confirmed test filters in `test_categories.yaml` and `rtest.xml` stay
exactly the same.

## Submission Checklist

- [ ] Look over the contributing guidelines at
https://github.com/ROCm/ROCm/blob/develop/CONTRIBUTING.md#pull-requests.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants