catchorg / catchorg/Catch2

Extend generator filtering to support element ranges

Open
#3,071 1 comment 0 reactions 0 assignees View on GitHub
Feature Request
Dominant language
C++
Stars
21.5k
Forks
3.5k
Avg merge
3d 16h
Merged PRs (30d)
2

Description

_Note that all the ideas here are fully backwards compatible, so the
extension can be implemented without a breaking change_

The recently-added generator filtering only allows filtering to a singular
element. This can be extended to support multiple elements and/or element
ranges.

For multiple separate elements, we can reuse the concept of commas as "OR"
from the test specs. This would then mean that `-g 1,3,4` filters the
generator to indices `1`, `3`, and `4`. For element ranges, we can use
the `start-end` format, so that `-g 1-4` would filter the generator to
indices `1`, `2`, `3`, and `4`.

These two should also be combinable, so that `-g 1,3,6-10` filters the
generator to indices `1`, `3`, `6`, `7`, ..., `10`.

## Examples

### Accepted

* `-g 1,2` - Elements at indices 1 and 2.
* `-g 1-3` - Elements at indices 1, 2, and 3.
* `-g 1-1` - Single element range, only the element at index 1.
* `-g 1-3,4,5-10` - Elements at indices 1,...,10.

### Rejected

* `-g 1-3,2-4` - The two element ranges are overlapping
* `-g 3,2,1` - Elements are in bad order, must be monotonically increasing
* `-g 3-1` - Range is decreasing, see above
* `-g 1,2,2,3` - 3rd element is duplicated
* `-g -2` - Negative number, should still be rejected
* `-g 1--2` - Syntactically invalid
* `-g 1-2-3` - Syntactically invalid

## Design questions

* Should the ranges be closed? Programming usually uses half-open ranges,
but closed-ranges feel more intuitive for specifying the range on the
command line.

* Should we error out on bad-but-fixable filters? Erroring out is less
confusing, but fixing can be more user friendly.
* Duplicated indices can be deduplicated.
* Unsorted indices can be sorted
* Overlapping ranges could be merged

* Should we support partially-specified ranges?
* `3-*` could mean "From 4th element to the end of the generator"

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.