UNPKG

covertable

Version:

Efficient TypeScript library for pairwise testing, generating minimal covering arrays with constraint support.

49 lines (48 loc) 2.73 kB
import type { Expression, ArithmeticExpression, ArrayObjectType } from '../types'; /** A field reference or arithmetic expression (resolves to an Operand). */ type FieldOrExpr<T> = `$${string & keyof T}` | ArithmeticExpression; /** A literal value (preserves template literal autocomplete via `string & {}`). */ type Literal = (string & {}) | number | boolean | null; /** Wrapper to force a value to be treated as a literal, not a field reference. */ type ValWrapper = { __val: true; value: any; }; /** Right-hand operand: field reference, expression, literal, or val-wrapped. */ type RightOperand<T> = FieldOrExpr<T> | Literal | ValWrapper; /** * Constraint builder with `$`-prefixed field references and type-safe * autocompletion via template literal types. * * ```typescript * const c = new Constraint<typeof factors>(); * c.eq("$OS", "Mac") * c.gt(c.mul("$Price", "$Qty"), 10000) * c.sum("$A", "$B", "$C") * ``` */ export declare class Constraint<T extends Record<string, readonly any[]> = ArrayObjectType> { eq(left: FieldOrExpr<T>, right: FieldOrExpr<T> | RightOperand<T>): Expression; ne(left: FieldOrExpr<T>, right: FieldOrExpr<T> | RightOperand<T>): Expression; gt(left: FieldOrExpr<T>, right: FieldOrExpr<T> | RightOperand<T>): Expression; lt(left: FieldOrExpr<T>, right: FieldOrExpr<T> | RightOperand<T>): Expression; gte(left: FieldOrExpr<T>, right: FieldOrExpr<T> | RightOperand<T>): Expression; lte(left: FieldOrExpr<T>, right: FieldOrExpr<T> | RightOperand<T>): Expression; in(left: FieldOrExpr<T>, values: any[]): Expression; and(...conditions: Expression[]): Expression; or(...conditions: Expression[]): Expression; not(condition: Expression): Expression; add(left: FieldOrExpr<T> | RightOperand<T>, right: FieldOrExpr<T> | RightOperand<T>): ArithmeticExpression; sub(left: FieldOrExpr<T> | RightOperand<T>, right: FieldOrExpr<T> | RightOperand<T>): ArithmeticExpression; mul(left: FieldOrExpr<T> | RightOperand<T>, right: FieldOrExpr<T> | RightOperand<T>): ArithmeticExpression; div(left: FieldOrExpr<T> | RightOperand<T>, right: FieldOrExpr<T> | RightOperand<T>): ArithmeticExpression; mod(left: FieldOrExpr<T> | RightOperand<T>, right: FieldOrExpr<T> | RightOperand<T>): ArithmeticExpression; pow(left: FieldOrExpr<T> | RightOperand<T>, right: FieldOrExpr<T> | RightOperand<T>): ArithmeticExpression; sum(...args: (FieldOrExpr<T> | RightOperand<T>)[]): ArithmeticExpression; product(...args: (FieldOrExpr<T> | RightOperand<T>)[]): ArithmeticExpression; fn(requires: (string & keyof T)[], evaluate: (row: { [K in keyof T]: any; }) => boolean): Expression; val(value: any): ValWrapper; } export {};