This PR implements the idea suggested in #1734#pullrequestreview-3284918572 and is based on the work from https://github.com/bitcoin/bitcoin/pull/33483.
Here is an example of the ctest output:
0$ ctest --test-dir build -j $(nproc)
1Test project /home/hebasto/dev/secp256k1/secp256k1/build
2 Start 1: secp256k1.noverify_tests.selftest_tests
3 Start 2: secp256k1.noverify_tests.all_proper_context_tests
4 Start 3: secp256k1.noverify_tests.all_static_context_tests
5 Start 4: secp256k1.noverify_tests.deprecated_context_flags_test
6<snip>
7193/196 Test [#31](/bitcoin-core-secp256k1/31/): secp256k1.noverify_tests.ecmult_constants ......................... Passed 5.32 sec
8194/196 Test [#184](/bitcoin-core-secp256k1/184/): secp256k1.tests.ellswift_xdh_correctness_tests .................... Passed 5.62 sec
9195/196 Test [#191](/bitcoin-core-secp256k1/191/): secp256k1.exhaustive_tests ........................................ Passed 6.97 sec
10196/196 Test [#126](/bitcoin-core-secp256k1/126/): secp256k1.tests.ecmult_constants .................................. Passed 9.60 sec
11
12100% tests passed, 0 tests failed out of 196
13
14Label Time Summary:
15secp256k1_example = 0.02 sec*proc (5 tests)
16secp256k1_exhaustive = 6.97 sec*proc (1 test)
17secp256k1_noverify_tests = 23.77 sec*proc (95 tests)
18secp256k1_tests = 43.67 sec*proc (95 tests)
19
20Total Test time (real) = 10.21 sec
For comparison, here is the output for the master branch on the same machine:
0$ ctest --test-dir build -j $(nproc)
1Test project /home/hebasto/dev/secp256k1/secp256k1/build
2 Start 1: secp256k1_noverify_tests
3 Start 2: secp256k1_tests
4 Start 3: secp256k1_exhaustive_tests
5 Start 4: secp256k1_ecdsa_example
6 Start 5: secp256k1_ecdh_example
7 Start 6: secp256k1_schnorr_example
8 Start 7: secp256k1_ellswift_example
9 Start 8: secp256k1_musig_example
101/8 Test [#4](/bitcoin-core-secp256k1/4/): secp256k1_ecdsa_example .......... Passed 0.00 sec
112/8 Test [#5](/bitcoin-core-secp256k1/5/): secp256k1_ecdh_example ........... Passed 0.00 sec
123/8 Test [#6](/bitcoin-core-secp256k1/6/): secp256k1_schnorr_example ........ Passed 0.00 sec
134/8 Test [#7](/bitcoin-core-secp256k1/7/): secp256k1_ellswift_example ....... Passed 0.00 sec
145/8 Test [#8](/bitcoin-core-secp256k1/8/): secp256k1_musig_example .......... Passed 0.00 sec
156/8 Test [#3](/bitcoin-core-secp256k1/3/): secp256k1_exhaustive_tests ....... Passed 6.26 sec
167/8 Test [#1](/bitcoin-core-secp256k1/1/): secp256k1_noverify_tests ......... Passed 14.31 sec
178/8 Test [#2](/bitcoin-core-secp256k1/2/): secp256k1_tests .................. Passed 31.65 sec
18
19100% tests passed, 0 tests failed out of 8
20
21Total Test time (real) = 31.65 sec
New Feature: As the number of tests has grown, the labels have been introduced to simplify test management. Now, one can run:
0$ ctest --test-dir build -j $(nproc) -L example
1Test project /home/hebasto/dev/secp256k1/secp256k1/build
2 Start 192: secp256k1.example.ecdsa
3 Start 193: secp256k1.example.ecdh
4 Start 194: secp256k1.example.schnorr
5 Start 195: secp256k1.example.ellswift
6 Start 196: secp256k1.example.musig
71/5 Test [#192](/bitcoin-core-secp256k1/192/): secp256k1.example.ecdsa .......... Passed 0.00 sec
82/5 Test [#193](/bitcoin-core-secp256k1/193/): secp256k1.example.ecdh ........... Passed 0.00 sec
93/5 Test [#194](/bitcoin-core-secp256k1/194/): secp256k1.example.schnorr ........ Passed 0.00 sec
104/5 Test [#195](/bitcoin-core-secp256k1/195/): secp256k1.example.ellswift ....... Passed 0.00 sec
115/5 Test [#196](/bitcoin-core-secp256k1/196/): secp256k1.example.musig .......... Passed 0.00 sec
12
13100% tests passed, 0 tests failed out of 5
14
15Label Time Summary:
16secp256k1_example = 0.01 sec*proc (5 tests)
17
18Total Test time (real) = 0.01 sec
or
0$ ctest --test-dir build -j $(nproc) -LE tests
1Test project /home/hebasto/dev/secp256k1/secp256k1/build
2 Start 192: secp256k1.example.ecdsa
3 Start 193: secp256k1.example.ecdh
4 Start 194: secp256k1.example.schnorr
5 Start 195: secp256k1.example.ellswift
6 Start 196: secp256k1.example.musig
7 Start 191: secp256k1.exhaustive_tests
81/6 Test [#192](/bitcoin-core-secp256k1/192/): secp256k1.example.ecdsa .......... Passed 0.00 sec
92/6 Test [#193](/bitcoin-core-secp256k1/193/): secp256k1.example.ecdh ........... Passed 0.00 sec
103/6 Test [#194](/bitcoin-core-secp256k1/194/): secp256k1.example.schnorr ........ Passed 0.00 sec
114/6 Test [#195](/bitcoin-core-secp256k1/195/): secp256k1.example.ellswift ....... Passed 0.00 sec
125/6 Test [#196](/bitcoin-core-secp256k1/196/): secp256k1.example.musig .......... Passed 0.00 sec
136/6 Test [#191](/bitcoin-core-secp256k1/191/): secp256k1.exhaustive_tests ....... Passed 6.19 sec
14
15100% tests passed, 0 tests failed out of 6
16
17Label Time Summary:
18secp256k1_example = 0.01 sec*proc (5 tests)
19secp256k1_exhaustive = 6.19 sec*proc (1 test)
20
21Total Test time (real) = 6.20 sec