Skip to content

walkframe/covertable

Repository files navigation

CoverTable

covertable logo

Time is limited.

Creating a test case that satisfies all possible factors is often unrealistic and, more importantly, tedious.

Save time with CoverTable, a flexible pairwise tool that generates combinations covering two (or more) factors.

Algorithm

CoverTable uses a one-test-at-a-time greedy algorithm to generate covering arrays.

  1. Assigns a unique prime number ID to each factor value, then enumerates all n-way combinations to be covered.
  2. 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.
  3. 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 tolerance parameter 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

Implementations

CoverTable is available in two implementations, with TypeScript as the primary focus and Python offered as a secondary option.

TypeScript

NPM Version Build Status

Works in both Node.js and browsers (UMD build).

Python (Legacy Support)

PyPI Version Build Status

For more details, please refer to the links above.

Performance

Note:
The following data was measured in Python 3.7.7 on a 3.1 GHz 6-Core Intel Core i5.
The coverage number is 2.

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.

Tolerance

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.

Example: 10^20 Test Cases

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

Packages

 
 
 

Contributors