There are a couple of possibilities. One is to use naming and to add a --match=<regex> command-line option. I'm planning to do something like that anyway, since I'd like to replace these four options:
--test
--suite
--skip-test
--skip-suite
with these:
--match=<regex>
--skip=<regex>
I think that provides even more flexibility but again with less complexity. It does require a bit of discipline in use of naming conventions.
You can also use tags. We haven't done a lot with these yet, but the idea was that we would get in the habit of tagging tests that are slow or that we often want to run as a group. At work we have a concept of test "size", small, medium, large, huge. We could do that with tags also. (The sizes are well-defined in terms of time and a warning can be issued if the test takes more or less time than it's stated size.)
dylan-test --tags=-huge
dylan-test --skip=threads
My goal is to make the common case as simple as possible, and keep the difficult cases (the dylan library?) possible.