Skip to content

Commit

Permalink
update README
Browse files Browse the repository at this point in the history
  • Loading branch information
righ committed Aug 29, 2024
1 parent c0d0684 commit ababb7f
Show file tree
Hide file tree
Showing 4 changed files with 135 additions and 203 deletions.
75 changes: 75 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Covertable

![covertable logo](./covertable.png)

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.

## Implementations

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

### TypeScript

[![NPM Version](https://badge.fury.io/js/covertable.svg)](https://badge.fury.io/js/covertable) [![Build Status](https://github.com/walkframe/covertable/actions/workflows/typescript.yaml/badge.svg)](https://github.com/walkframe/covertable/actions/workflows/typescript.yaml)

- [README](https://github.com/walkframe/covertable/blob/master/typescript)
- [History](https://github.com/walkframe/covertable/blob/master/typescript/history.md)

### Python (Legacy Support)

[![PyPI Version](https://badge.fury.io/py/covertable.svg)](https://badge.fury.io/py/covertable) [![Build Status](https://github.com/walkframe/covertable/actions/workflows/python.yaml/badge.svg)](https://github.com/walkframe/covertable/actions/workflows/python.yaml)

- [README](https://github.com/walkframe/covertable/blob/master/python/README.rst)
- [History](https://github.com/walkframe/covertable/blob/master/python/history.md)


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` <br> time: `0.0006s` | num: `9` <br> time: `0.0006s` | num: `14` <br> time: `0.0005s` |
| **3^13** | num: `19` <br> time: `0.03s` | num: `17` <br> time: `0.03s` | num: `21` <br> time: `0.003s` |
| **4^15 + 3^17 + 2^29** | num: `36` <br> time: `7.41s` | num: `34` <br> time: `7.47s` | num: `42` <br> time: `0.40s` |
| **4^1 + 3^39 + 2^35** | num: `27` <br> time: `15.19s` | num: `26` <br> time: `14.70s` | num: `30` <br> time: `0.51s` |
| **2^100** | num: `14` <br> time: `23.97s` | num: `12` <br> time: `0.63s` | num: `13` <br> time: `0.48s` |
| **10^20** | num: `198` <br> time: `14.28s` | num: `195` <br> time: `14.48s` | num: `284` <br> 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` |


203 changes: 0 additions & 203 deletions README.rst

This file was deleted.

22 changes: 22 additions & 0 deletions python/history.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# History

## 2.1.x
- Add `make_async` function to generate combinations sequentially.

## 2.0.x

- The `sorter` option was split into `sorter` and `criterion`.
- e.g., greedy -> hash sorter + greedy criterion.
- The `greedy` method is much faster than before.
- The `greedy` method now includes a `tolerance` option to balance speed and results.
- The sequential sorter was dropped.
- Due to the potential for huge numbers of combinations in TypeScript.

## 1.1.x

- The greedy sorter was improved in both implementations.
- Speed has been increased.

## 1.0.x

- First release 🎉
38 changes: 38 additions & 0 deletions typescript/history.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# History

## 2.4.x
- Fixed an issue where preFilter was evaluating and excluding incomplete elements. This is a minor upgrade due to the large scope of the impact.
- Type names are now unified with the Type suffix.

## 2.3.x
- PictConstraintsLexer was added. ([#37](https://github.com/walkframe/covertable/pull/37))
- It is a lexer designed to parse PICT constraints.
- It parses constraints written in the PICT format, enabling the evaluation of complex conditions.
- The parsed constraints are then used in the make function to dynamically filter the generated combinations based on the specified rules.

## 2.2.x
- Speed is increased by expressing combinations of elements as a product of prime numbers.
- Added `SuggestRowType` to infer the row type.

## 2.1.x
- Speed up processing speed by pre-sorting target pairs.
- Added `makeAsync` function to generate combinations sequentially.


## 2.0.x

- The `sorter` option was split into `sorter` and `criterion`.
- e.g., greedy -> hash sorter + greedy criterion.
- The `greedy` method is much faster than before.
- The `greedy` method now includes a `tolerance` option to balance speed and results.
- The sequential sorter was dropped.
- Due to the potential for huge numbers of combinations in TypeScript.

## 1.1.x

- The greedy sorter was improved in both implementations.
- Speed has been increased.

## 1.0.x

- First release 🎉

0 comments on commit ababb7f

Please sign in to comment.