|
| 1 | +# Covertable |
| 2 | + |
| 3 | + |
| 4 | + |
| 5 | +Time is limited. |
| 6 | + |
| 7 | +Creating a test case that satisfies all possible factors is often unrealistic and, more importantly, tedious. |
| 8 | + |
| 9 | +Save time with Covertable, a flexible pairwise tool that generates combinations covering two (or more) factors. |
| 10 | + |
| 11 | +## Implementations |
| 12 | + |
| 13 | +Covertable is available in two implementations, with TypeScript as the primary focus and Python offered as a secondary option. |
| 14 | + |
| 15 | +### TypeScript |
| 16 | + |
| 17 | +[](https://badge.fury.io/js/covertable) [](https://github.com/walkframe/covertable/actions/workflows/typescript.yaml) |
| 18 | + |
| 19 | +- [README](https://github.com/walkframe/covertable/blob/master/typescript) |
| 20 | +- [History](https://github.com/walkframe/covertable/blob/master/typescript/history.md) |
| 21 | + |
| 22 | +### Python (Legacy Support) |
| 23 | + |
| 24 | +[](https://badge.fury.io/py/covertable) [](https://github.com/walkframe/covertable/actions/workflows/python.yaml) |
| 25 | + |
| 26 | +- [README](https://github.com/walkframe/covertable/blob/master/python/README.rst) |
| 27 | +- [History](https://github.com/walkframe/covertable/blob/master/python/history.md) |
| 28 | + |
| 29 | + |
| 30 | +For more details, please refer to the links above. |
| 31 | + |
| 32 | +## Performance |
| 33 | + |
| 34 | +> **Note:** |
| 35 | +> The following data was measured in Python 3.7.7 on a `3.1 GHz 6-Core Intel Core i5`. |
| 36 | +> The coverage number is `2`. |
| 37 | +
|
| 38 | +| Combination | Default | Minimum case | Fastest case | |
| 39 | +|-------------------|-------------------------------------|---------------------------------------|------------------------------------| |
| 40 | +| **3^4** | num: `9` <br> time: `0.0006s` | num: `9` <br> time: `0.0006s` | num: `14` <br> time: `0.0005s` | |
| 41 | +| **3^13** | num: `19` <br> time: `0.03s` | num: `17` <br> time: `0.03s` | num: `21` <br> time: `0.003s` | |
| 42 | +| **4^15 + 3^17 + 2^29** | num: `36` <br> time: `7.41s` | num: `34` <br> time: `7.47s` | num: `42` <br> time: `0.40s` | |
| 43 | +| **4^1 + 3^39 + 2^35** | num: `27` <br> time: `15.19s` | num: `26` <br> time: `14.70s` | num: `30` <br> time: `0.51s` | |
| 44 | +| **2^100** | num: `14` <br> time: `23.97s` | num: `12` <br> time: `0.63s` | num: `13` <br> time: `0.48s` | |
| 45 | +| **10^20** | num: `198` <br> time: `14.28s` | num: `195` <br> time: `14.48s` | num: `284` <br> time: `0.53s` | |
| 46 | + |
| 47 | +In general, as the number of elements or coverage increases, the number of combinations tends to increase significantly. |
| 48 | + |
| 49 | +## Tolerance |
| 50 | + |
| 51 | +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. |
| 52 | + |
| 53 | +The greater the `tolerance`, the faster the speed and the larger the number of combinations. |
| 54 | + |
| 55 | +### Example: 10^20 Test Cases |
| 56 | + |
| 57 | +| Tolerance | num | time | |
| 58 | +|-----------|------|--------| |
| 59 | +| 0 (default) | `195` | `14.48s` | |
| 60 | +| 1 | `199` | `12.45s` | |
| 61 | +| 2 | `201` | `9.48s` | |
| 62 | +| 3 | `201` | `7.17s` | |
| 63 | +| 4 | `207` | `5.70s` | |
| 64 | +| 5 | `212` | `4.58s` | |
| 65 | +| 6 | `212` | `3.65s` | |
| 66 | +| 7 | `216` | `3.07s` | |
| 67 | +| 8 | `223` | `2.57s` | |
| 68 | +| 9 | `226` | `2.14s` | |
| 69 | +| 10 | `233` | `1.84s` | |
| 70 | +| 11 | `237` | `1.61s` | |
| 71 | +| 12 | `243` | `1.43s` | |
| 72 | +| 13 | `249` | `1.28s` | |
| 73 | +| 14 | `254` | `1.19s` | |
| 74 | + |
| 75 | + |
0 commit comments