covertable
Version:
Efficient TypeScript library for pairwise testing, generating minimal covering arrays with constraint support.
49 lines (48 loc) • 2.73 kB
TypeScript
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 {};