2.2.6 • Published 1 year ago

covertable v2.2.6

Weekly downloads
122
License
Apache-2.0
Repository
github
Last release
1 year ago

npm version Workflow codecov

Installation

$ npm install covertable --save

Usage

Simple demo in Node.js:

var covertable = require('covertable');
var make = covertable.default;

var machine = ['iphone', 'pixel'];
var os = ['ios', 'android'];
var browser = ['FireFox', 'Chrome', 'Safari'];

make([machine, os, browser]);

Output:

[
  [ 'pixel', 'android', 'Chrome' ],
  [ 'pixel', 'ios', 'Safari' ],
  [ 'pixel', 'android', 'FireFox' ],
  [ 'iphone', 'android', 'Safari' ],
  [ 'iphone', 'ios', 'Chrome' ],
  [ 'iphone', 'ios', 'FireFox' ]
]

Of course, it also works in the browser well.

Advanced demo in TypeScript:

import { default as make, makeAsync, sorters, criteria } from "covertable";

const machine = ['iphone', 'pixel'];
const os = ['ios', 'android'];
const browser = ['FireFox', 'Chrome', 'Safari'];

make([machine, os, browser], { // optional
  length: 2, // default: 2
  criterion: criteria.simple, // default: criteria.greedy
  sorter: sorters.random, // default: sorters.hash
  preFilter: (row: any) => !(row[1] === 'android' && row[0] !== 'pixel'), // default: null
  postFilter: (row: any) => !(row[1] === 'ios' && row[2] !== 'Safari'), // default: null
});

Output:

[ // filtered
  [ 'iphone', 'ios', 'Safari' ],
  [ 'pixel', 'android', 'Chrome' ],
  [ 'pixel', 'ios', 'Safari' ]
]

You can use also makeAsync function (generator).

  • It receives the same arguments with make function.
  • It returns the row at the time it's made.

Object input and output

You can specify factors as object type:

import { default as make, sorters, criteria } from "covertable";

const machine = ['iphone', 'pixel'];
const os = ['ios', 'android'];
const browser = ['FireFox', 'Chrome', 'Safari'];

make({machine, os, browser}, { // optional
  length: 2,
  preFilter: (row: any) => !(row.os === 'android' && row.machine !== 'pixel'), // default: null
  postFilter: (row: any) => !(row.os === 'ios' && row.browser !== 'Safari'), // default: null
});

Then the output will change as follows:

[ // filtered
  { machine: 'iphone', browser: 'Safari', os: 'ios' },
  { machine: 'pixel', browser: 'Chrome', os: 'android' },
  { machine: 'pixel', browser: 'Safari', os: 'ios' },
]

Options

covertable.make function has options as object at 2nd argument.

All options are omittable.

length

Number of factors to be covered. (default: 2)

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

sorter

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

You can choice a sorter from the following:

  • sorters.random: It makes different combinations everytime. (fastest)
  • sorters.hash: It makes combinations depending on hash of the pair and seed. (default)

    • It receives seed.
      • seed option decides the order of storing from unstored pairs.
      • When the combination of factors and seed are the same, covertable reproduces the same collective.

criterion

You can choice a criterion from the following:

  • criteria.simple: it extracts any pairs that can be stored into the processing row.
  • criteria.greedy: it attempts to make most efficient combinations. (default)

While criteria.simple processes quickly, criteria.greedy makes fewer combinations. Although the latter is superior to former in terms of fewer combinations generally, it is time-intensive process.

Not relevant options will be ignored.

preFilter

This is a function to filter beforehand.

It receives an argument row as object type.

When the function returns false, the row combination will not be 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 or row => row['month'] < 6

postFilter

This means a function to filter later.

The usage is the same as preFilter, only the difference is the timing of the call. It will delete rows not matched this function at the last.

For this reason, the final test cases may not satisfy the factors coverage.

Requirement

ES2015 or later

Development

$ npm install

Testing

$ npm test -- --coverage

Publish

$ # npm adduser
$ npm run build
$ npm version patch
$ npm publish

More info

2.2.6

1 year ago

2.2.5

2 years ago

2.2.4

2 years ago

2.2.3

3 years ago

2.2.2

3 years ago

2.2.1

3 years ago

2.2.0

4 years ago

2.1.1

4 years ago

2.1.0

4 years ago

2.0.2

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.1.2

4 years ago

1.1.1

4 years ago

1.1.0

5 years ago

1.0.0

5 years ago