CoverTable is a pairwise (N-wise) test case generation library based on the AETG algorithm, available for both TypeScript and Python.
It is PICT-compatible: you can use PICT-format model files — including parameters, sub-models, constraints, invalid values, weights, and aliases — directly with CoverTable.
Try the online demo: Compatible PICT — an interactive tool that parses PICT models and generates covering arrays in your browser.
CoverTable uses a one-test-at-a-time greedy algorithm to generate covering arrays.
- Assigns a unique serial ID to each factor value, then enumerates all n-way combinations to be covered.
- For each test row, the criterion selects the most efficient uncovered combination to include next by evaluating how many other uncovered combinations it would simultaneously satisfy.
- Repeats until all combinations are covered.
Two criteria are available:
- Greedy (default): Evaluates coverage efficiency for candidate pairs and selects the one that maximizes coverage. The
toleranceparameter allows trading quality for speed. - Simple: Picks the first feasible pair without efficiency evaluation. Faster, but produces more test cases.
Additionally, sorters (Hash / Random) control the initial ordering of combinations, which influences the quality and reproducibility of the output.
See also: Pairwise Testing Tool Comparison
CoverTable is available in two implementations, with TypeScript as the primary focus and Python offered as a secondary option.
Works in both Node.js and browsers (ESM/CJS dual build).
- Latest (v3): https://covertable.walkframe.com
- v2 and earlier: https://docs.walkframe.com/covertable/advanced
Note:
The following data was measured in Python 3.7.7 on a3.1 GHz 6-Core Intel Core i5.
The coverage number is2.
| Combination | Default | Minimum case | Fastest case |
|---|---|---|---|
| 3^4 | num: 9 time: 0.0006s |
num: 9 time: 0.0006s |
num: 14 time: 0.0005s |
| 3^13 | num: 19 time: 0.03s |
num: 17 time: 0.03s |
num: 21 time: 0.003s |
| 4^15 + 3^17 + 2^29 | num: 36 time: 7.41s |
num: 34 time: 7.47s |
num: 42 time: 0.40s |
| 4^1 + 3^39 + 2^35 | num: 27 time: 15.19s |
num: 26 time: 14.70s |
num: 30 time: 0.51s |
| 2^100 | num: 14 time: 23.97s |
num: 12 time: 0.63s |
num: 13 time: 0.48s |
| 10^20 | num: 198 time: 14.28s |
num: 195 time: 14.48s |
num: 284 time: 0.53s |
In general, as the number of elements or coverage increases, the number of combinations tends to increase significantly.
If you use the greedy criterion and specify a positive integer for the tolerance option, you can increase speed at the expense of the number of combinations.
The greater the tolerance, the faster the speed and the larger the number of combinations.
| Tolerance | num | time |
|---|---|---|
| 0 (default) | 195 |
14.48s |
| 1 | 199 |
12.45s |
| 2 | 201 |
9.48s |
| 3 | 201 |
7.17s |
| 4 | 207 |
5.70s |
| 5 | 212 |
4.58s |
| 6 | 212 |
3.65s |
| 7 | 216 |
3.07s |
| 8 | 223 |
2.57s |
| 9 | 226 |
2.14s |
| 10 | 233 |
1.84s |
| 11 | 237 |
1.61s |
| 12 | 243 |
1.43s |
| 13 | 249 |
1.28s |
| 14 | 254 |
1.19s |
