High performance set theory - functional utilities which operate on arbitrary input sets.
npm install set-utilities[![NPM Version][]][npm]
[![MIT License][]][license]
[![FOSSA Status][]][fossa]
[![Build & Test Job][]][github build test]
[![Scale Test Job][]][github scale test]
[![Coverage][]][coveralls]
[![Install Size][]][package phobia]
[![Zipped Size][]][bundle phobia]
[![Language][]][typescript]
High performance set theory.
This library is a collection of functional utilities from set theory,
each of which operate on an arbitrary number of input sets.
Each function accepts variable arguments and operates with the principals of immutability:
none of the input sets are modified in the process of calculation.
![difference visual][]
``typescript
import { difference } from 'set-utilities';
const differenceAB = difference(setA, setB);
const differenceABC = difference(setA, setB, setC);
`
![intersection visual][]
`typescript
import { intersection } from 'set-utilities';
const intersectionAB = intersection(setA, setB);
const intersectionABC = intersection(setA, setB, setC);
`
![union visual][]
`typescript
import { union } from 'set-utilities';
const unionAB = union(setA, setB);
const unionABC = union(setA, setB, setC);
`
![xor visual][]
`typescript
import { xor } from 'set-utilities';
const xorAB = xor(setA, setB);
const xorABC = xor(setA, setB, setC);
`
![equivalence visual][]
`typescript
import { equivalence } from 'set-utilities';
const isEquivalentAB = equivalence(setA, setB);
const isEquivalentABC = equivalence(setA, setB, setC);
`
![disjoint visual][]
`typescript
import { disjoint } from 'set-utilities';
const isDisjointAB = disjoint(setA, setB);
const isDisjointABC = disjoint(setA, setB, setC);
`
![pairwise disjoint visual][]
`typescript
import { pairwiseDisjoint } from 'set-utilities';
const isPairwiseDisjointAB = pairwiseDisjoint(setA, setB);
const isPairwiseDisjointABC = pairwiseDisjoint(setA, setB, setC);
`
![subset visual][]
`typescript
import { subset } from 'set-utilities';
const isSubsetAB = subset(setA, setB);
const isSubsetABC = subset(setA, setB, setC);
`
![proper subset visual][]
`typescript
import { properSubset } from 'set-utilities';
const isProperSubsetAB = properSubset(setA, setB);
const isProperSubsetABC = properSubset(setA, setB, setC);
`
![superset visual][]
`typescript
import { superset } from 'set-utilities';
const isSupersetAB = superset(setA, setB);
const isSupersetABC = superset(setA, setB, setC);
`
![proper superset visual][]
`typescript
import { properSuperset } from 'set-utilities';
const isProperSupersetAB = properSuperset(setA, setB);
const isProperSupersetABC = properSuperset(setA, setB, setC);
`
![sort visual][]
`typescript
import { sort } from 'set-utilities';
const sortedA = sort(setA);
const sortedB = sort(setB, compareFunction);
``
[NPM Version]: https://img.shields.io/npm/v/set-utilities
[npm]: https://www.npmjs.org/package/set-utilities
[MIT License]: https://img.shields.io/npm/l/set-utilities?color=blue
[license]: LICENSE
[FOSSA Status]: https://app.fossa.com/api/projects/git%2Bgithub.com%2Fkubikowski%2Fset-utilities.svg?type=shield
[fossa]: https://app.fossa.com/projects/git%2Bgithub.com%2Fkubikowski%2Fset-utilities?ref=badge_shield
[Build & Test Job]: https://github.com/kubikowski/set-utilities/actions/workflows/test.yml/badge.svg
[github build test]: https://github.com/kubikowski/set-utilities/actions/workflows/test.yml
[Scale Test Job]: https://github.com/kubikowski/set-utilities/actions/workflows/scale-test.yml/badge.svg
[github scale test]: https://github.com/kubikowski/set-utilities/actions/workflows/scale-test.yml
[Coverage]: https://coveralls.io/repos/github/kubikowski/set-utilities/badge.svg?branch=main
[coveralls]: https://coveralls.io/github/kubikowski/set-utilities?branch=main
[Install Size]: https://packagephobia.com/badge?p=set-utilities
[package phobia]: https://packagephobia.com/result?p=set-utilities
[Zipped Size]: https://img.shields.io/bundlephobia/minzip/set-utilities?color=success
[bundle phobia]: https://bundlephobia.com/package/set-utilities
[Language]: https://img.shields.io/github/languages/top/kubikowski/set-utilities
[typescript]: https://www.typescriptlang.org
[set utilities]: https://github.com/kubikowski/set-utilities/wiki/assets/set-utilities.svg
[difference visual]: https://github.com/kubikowski/set-utilities/wiki/assets/difference.svg
[intersection visual]: https://github.com/kubikowski/set-utilities/wiki/assets/intersection.svg
[union visual]: https://github.com/kubikowski/set-utilities/wiki/assets/union.svg
[xor visual]: https://github.com/kubikowski/set-utilities/wiki/assets/xor.svg
[equivalence visual]: https://github.com/kubikowski/set-utilities/wiki/assets/equivalence.svg
[disjoint visual]: https://github.com/kubikowski/set-utilities/wiki/assets/disjoint.svg
[pairwise disjoint visual]: https://github.com/kubikowski/set-utilities/wiki/assets/pairwise-disjoint.svg
[subset visual]: https://github.com/kubikowski/set-utilities/wiki/assets/subset.svg
[proper subset visual]: https://github.com/kubikowski/set-utilities/wiki/assets/proper-subset.svg
[superset visual]: https://github.com/kubikowski/set-utilities/wiki/assets/superset.svg
[proper superset visual]: https://github.com/kubikowski/set-utilities/wiki/assets/proper-superset.svg
[sort visual]: https://github.com/kubikowski/set-utilities/wiki/assets/sort.svg