Skip to main content

It makes combinations covering pairs for pairwise testing.

Project description


  • Python: 3.3 or later.
    • Tested with 3.7


$ pip install covertable


Just import covertable and call make function.

>>> from covertable import make, sorters, criteria

>>> machine_list = ['iphone', 'pixel']
>>> os_list = ['ios', 'android']
>>> browser_list = ['FireFox', 'Chrome', 'Safari']
>>> # list input and output
>>> make(
...     [machine_list, os_list, browser_list],  # list factors
...     length=2,  # default: 2
...     sorter=sorters.random,  # default: sorters.hash
...     criterion=criteria.simple,  # default: criteria.greedy
...     seed=100,  # default: ''
...     pre_filter=lambda row: not(row[1] == 'android' and row[0] != 'pixel') and not(row[1] == 'ios' and row[0] != 'iphone'),  # default: None
... )
  ['pixel', 'android', 'Safari'],
  ['iphone', 'ios', 'Chrome'],
  ['iphone', 'ios', 'Safari'],
  ['pixel', 'android', 'Chrome'],
  ['pixel', 'android', 'FireFox'],
  ['iphone', 'ios', 'FireFox']

>>> # dict input and output
>>> make(
...     {'machine': machine_list, 'os': os_list, 'browser': browser_list},  # dict factors
...     length=2,  # default: 2
...     tolerance=3,  # default: 0
...     post_filter=lambda row: not(row['os'] == 'android' and row['machine'] != 'pixel') and not(row['os'] == 'ios' and row['machine'] != 'iphone'),  # default: None
... )
  {'machine': 'pixel', 'browser': 'Chrome', 'os': 'android'},
  {'machine': 'pixel', 'browser': 'FireFox', 'os': 'android'},
  {'machine': 'iphone', 'os': 'ios', 'browser': 'Chrome'},
  {'os': 'ios', 'browser': 'FireFox', 'machine': 'iphone'}


covertable.make function has options as keyword argument.

All options are omittable.


It means length of pair to meet. (default: 2)

The more it increases, the more number of combinations increases.


Combinations depend on the order of spreading all over the rows.

You can choice a sorter from the following:


This makes different combinations everytime. (fastest)


This makes combinations depending on hash of the pair and seed. (default)

  • It receives seed and useCache options.
    • seed option decides the order of storing from unstored pairs, therefore it outputs the same result every time when number of factors and seed are the same.
    • useCache option decide if using cache of hash or not. (default: true)
      • It is around 10% faster than setting useCache off.



This extracts any pairs that can be stored into the processing row.


This attempts to make most efficient combinations. (default)

  • These combinations are not always shorter than simple criterion.
  • It receives tolerance option.


Not relevant options will be ignored.


This means a function to filter beforehand.

It receives an argument row as object type.

When the function returns false, the row combination will not registered.

  • If factors type is Array, you should specify an index at the subscript like row => row[1] < 6.
  • If factors type is Object, you should specify a key at the subscript like row => row['month'] < 6


This means a function to filter later.

Usage is the same as preFilter, only the difference is the timing that it is called. It will delete rows not matched this function at the last.


# preparation
$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ pip install -r dev_requirements.txt

# testing
(venv) $ tox # -e py37 -e cov -e black


(venv) $ python sdist bdist_wheel
(venv) $ twine upload --repository pypi dist/*

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for covertable, version 2.0.1
Filename, size File type Python version Upload date Hashes
Filename, size covertable-2.0.1-py3-none-any.whl (7.1 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size covertable-2.0.1.tar.gz (5.7 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page