@libraz/coverwise 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +191 -0
- package/README.md +119 -0
- package/README.npm.md +119 -0
- package/dist/coverwise.js +2 -0
- package/dist/coverwise.wasm +0 -0
- package/dist/js/constraint.d.ts +78 -0
- package/dist/js/constraint.d.ts.map +1 -0
- package/dist/js/constraint.js +213 -0
- package/dist/js/constraint.js.map +1 -0
- package/dist/js/index.d.ts +94 -0
- package/dist/js/index.d.ts.map +1 -0
- package/dist/js/index.js +164 -0
- package/dist/js/index.js.map +1 -0
- package/dist/js/pure/adapter.d.ts +40 -0
- package/dist/js/pure/adapter.d.ts.map +1 -0
- package/dist/js/pure/adapter.js +207 -0
- package/dist/js/pure/adapter.js.map +1 -0
- package/dist/js/pure/index.d.ts +83 -0
- package/dist/js/pure/index.d.ts.map +1 -0
- package/dist/js/pure/index.js +132 -0
- package/dist/js/pure/index.js.map +1 -0
- package/dist/js/types.d.ts +132 -0
- package/dist/js/types.d.ts.map +1 -0
- package/dist/js/types.js +3 -0
- package/dist/js/types.js.map +1 -0
- package/dist/src/ts/algo/greedy.d.ts +9 -0
- package/dist/src/ts/algo/greedy.d.ts.map +1 -0
- package/dist/src/ts/algo/greedy.js +137 -0
- package/dist/src/ts/algo/greedy.js.map +1 -0
- package/dist/src/ts/algo/index.d.ts +2 -0
- package/dist/src/ts/algo/index.d.ts.map +1 -0
- package/dist/src/ts/algo/index.js +2 -0
- package/dist/src/ts/algo/index.js.map +1 -0
- package/dist/src/ts/core/coverage-engine.d.ts +40 -0
- package/dist/src/ts/core/coverage-engine.d.ts.map +1 -0
- package/dist/src/ts/core/coverage-engine.js +366 -0
- package/dist/src/ts/core/coverage-engine.js.map +1 -0
- package/dist/src/ts/core/generator.d.ts +6 -0
- package/dist/src/ts/core/generator.d.ts.map +1 -0
- package/dist/src/ts/core/generator.js +394 -0
- package/dist/src/ts/core/generator.js.map +1 -0
- package/dist/src/ts/core/index.d.ts +3 -0
- package/dist/src/ts/core/index.d.ts.map +1 -0
- package/dist/src/ts/core/index.js +3 -0
- package/dist/src/ts/core/index.js.map +1 -0
- package/dist/src/ts/model/boundary.d.ts +29 -0
- package/dist/src/ts/model/boundary.d.ts.map +1 -0
- package/dist/src/ts/model/boundary.js +102 -0
- package/dist/src/ts/model/boundary.js.map +1 -0
- package/dist/src/ts/model/constraint-ast.d.ts +152 -0
- package/dist/src/ts/model/constraint-ast.d.ts.map +1 -0
- package/dist/src/ts/model/constraint-ast.js +384 -0
- package/dist/src/ts/model/constraint-ast.js.map +1 -0
- package/dist/src/ts/model/constraint-parser.d.ts +49 -0
- package/dist/src/ts/model/constraint-parser.d.ts.map +1 -0
- package/dist/src/ts/model/constraint-parser.js +831 -0
- package/dist/src/ts/model/constraint-parser.js.map +1 -0
- package/dist/src/ts/model/error.d.ts +19 -0
- package/dist/src/ts/model/error.d.ts.map +1 -0
- package/dist/src/ts/model/error.js +19 -0
- package/dist/src/ts/model/error.js.map +1 -0
- package/dist/src/ts/model/generate-options.d.ts +82 -0
- package/dist/src/ts/model/generate-options.d.ts.map +1 -0
- package/dist/src/ts/model/generate-options.js +52 -0
- package/dist/src/ts/model/generate-options.js.map +1 -0
- package/dist/src/ts/model/index.d.ts +6 -0
- package/dist/src/ts/model/index.d.ts.map +1 -0
- package/dist/src/ts/model/index.js +6 -0
- package/dist/src/ts/model/index.js.map +1 -0
- package/dist/src/ts/model/parameter.d.ts +65 -0
- package/dist/src/ts/model/parameter.d.ts.map +1 -0
- package/dist/src/ts/model/parameter.js +157 -0
- package/dist/src/ts/model/parameter.js.map +1 -0
- package/dist/src/ts/model/test-case.d.ts +67 -0
- package/dist/src/ts/model/test-case.d.ts.map +1 -0
- package/dist/src/ts/model/test-case.js +28 -0
- package/dist/src/ts/model/test-case.js.map +1 -0
- package/dist/src/ts/util/bitset.d.ts +14 -0
- package/dist/src/ts/util/bitset.d.ts.map +1 -0
- package/dist/src/ts/util/bitset.js +66 -0
- package/dist/src/ts/util/bitset.js.map +1 -0
- package/dist/src/ts/util/combinatorics.d.ts +4 -0
- package/dist/src/ts/util/combinatorics.d.ts.map +1 -0
- package/dist/src/ts/util/combinatorics.js +60 -0
- package/dist/src/ts/util/combinatorics.js.map +1 -0
- package/dist/src/ts/util/index.d.ts +5 -0
- package/dist/src/ts/util/index.d.ts.map +1 -0
- package/dist/src/ts/util/index.js +7 -0
- package/dist/src/ts/util/index.js.map +1 -0
- package/dist/src/ts/util/rng.d.ts +13 -0
- package/dist/src/ts/util/rng.d.ts.map +1 -0
- package/dist/src/ts/util/rng.js +112 -0
- package/dist/src/ts/util/rng.js.map +1 -0
- package/dist/src/ts/util/string_util.d.ts +3 -0
- package/dist/src/ts/util/string_util.d.ts.map +1 -0
- package/dist/src/ts/util/string_util.js +25 -0
- package/dist/src/ts/util/string_util.js.map +1 -0
- package/dist/src/ts/validator/constraint-validator.d.ts +34 -0
- package/dist/src/ts/validator/constraint-validator.d.ts.map +1 -0
- package/dist/src/ts/validator/constraint-validator.js +51 -0
- package/dist/src/ts/validator/constraint-validator.js.map +1 -0
- package/dist/src/ts/validator/coverage-validator.d.ts +42 -0
- package/dist/src/ts/validator/coverage-validator.d.ts.map +1 -0
- package/dist/src/ts/validator/coverage-validator.js +230 -0
- package/dist/src/ts/validator/coverage-validator.js.map +1 -0
- package/dist/src/ts/validator/index.d.ts +3 -0
- package/dist/src/ts/validator/index.d.ts.map +1 -0
- package/dist/src/ts/validator/index.js +3 -0
- package/dist/src/ts/validator/index.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fluent constraint builder for coverwise.
|
|
3
|
+
*
|
|
4
|
+
* Generates constraint strings compatible with the C++ constraint parser.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* import { when, not, allOf, anyOf } from '@libraz/coverwise/constraint';
|
|
8
|
+
*
|
|
9
|
+
* // IF os = Windows THEN browser != Safari
|
|
10
|
+
* when('os').eq('Windows').then(when('browser').ne('Safari'))
|
|
11
|
+
*
|
|
12
|
+
* // NOT (os = win AND browser = safari)
|
|
13
|
+
* not(allOf(when('os').eq('win'), when('browser').eq('safari')))
|
|
14
|
+
*/
|
|
15
|
+
// --- Value formatting ---
|
|
16
|
+
const NEEDS_QUOTE_RE = /[\s=!<>(),{}]/;
|
|
17
|
+
const KEYWORDS = new Set(['IF', 'THEN', 'ELSE', 'IMPLIES', 'AND', 'OR', 'NOT', 'IN', 'LIKE']);
|
|
18
|
+
function formatValue(value) {
|
|
19
|
+
if (typeof value === 'boolean') {
|
|
20
|
+
return String(value);
|
|
21
|
+
}
|
|
22
|
+
if (typeof value === 'number') {
|
|
23
|
+
return String(value);
|
|
24
|
+
}
|
|
25
|
+
if (NEEDS_QUOTE_RE.test(value) || KEYWORDS.has(value.toUpperCase())) {
|
|
26
|
+
return `"${value}"`;
|
|
27
|
+
}
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
function formatNumericOrParam(value) {
|
|
31
|
+
if (typeof value === 'number') {
|
|
32
|
+
return String(value);
|
|
33
|
+
}
|
|
34
|
+
// String = param name, output bare
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
function formatSetValue(value) {
|
|
38
|
+
if (typeof value === 'boolean') {
|
|
39
|
+
return String(value);
|
|
40
|
+
}
|
|
41
|
+
if (typeof value === 'number') {
|
|
42
|
+
return String(value);
|
|
43
|
+
}
|
|
44
|
+
if (NEEDS_QUOTE_RE.test(value) || KEYWORDS.has(value.toUpperCase())) {
|
|
45
|
+
return `"${value}"`;
|
|
46
|
+
}
|
|
47
|
+
return value;
|
|
48
|
+
}
|
|
49
|
+
// --- Internal classes ---
|
|
50
|
+
class ConditionImpl {
|
|
51
|
+
constructor(expr) {
|
|
52
|
+
this.expr = expr;
|
|
53
|
+
}
|
|
54
|
+
and(other) {
|
|
55
|
+
return new ConditionImpl(`${this.wrap()} AND ${wrapCondition(other)}`);
|
|
56
|
+
}
|
|
57
|
+
or(other) {
|
|
58
|
+
return new ConditionImpl(`${this.wrap()} OR ${wrapCondition(other)}`);
|
|
59
|
+
}
|
|
60
|
+
// biome-ignore lint/suspicious/noThenProperty: fluent API requires .then() for IF...THEN syntax
|
|
61
|
+
then(consequence) {
|
|
62
|
+
return new ConstraintImpl(`IF ${this.expr} THEN ${consequence.toString()}`);
|
|
63
|
+
}
|
|
64
|
+
implies(consequence) {
|
|
65
|
+
return new ConstraintImpl(`${this.expr} IMPLIES ${consequence.toString()}`);
|
|
66
|
+
}
|
|
67
|
+
toString() {
|
|
68
|
+
return this.expr;
|
|
69
|
+
}
|
|
70
|
+
wrap() {
|
|
71
|
+
// Wrap in parens if the expression contains OR (for correct AND precedence)
|
|
72
|
+
if (needsParensForAnd(this.expr)) {
|
|
73
|
+
return `(${this.expr})`;
|
|
74
|
+
}
|
|
75
|
+
return this.expr;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
class ConstraintImpl {
|
|
79
|
+
constructor(expr) {
|
|
80
|
+
this.expr = expr;
|
|
81
|
+
}
|
|
82
|
+
else(alternative) {
|
|
83
|
+
return new ConstraintImpl(`${this.expr} ELSE ${alternative.toString()}`);
|
|
84
|
+
}
|
|
85
|
+
toString() {
|
|
86
|
+
return this.expr;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
class ConditionStartImpl {
|
|
90
|
+
constructor(param) {
|
|
91
|
+
this.param = param;
|
|
92
|
+
}
|
|
93
|
+
eq(value) {
|
|
94
|
+
return new ConditionImpl(`${this.param} = ${formatValue(value)}`);
|
|
95
|
+
}
|
|
96
|
+
ne(value) {
|
|
97
|
+
return new ConditionImpl(`${this.param} != ${formatValue(value)}`);
|
|
98
|
+
}
|
|
99
|
+
gt(value) {
|
|
100
|
+
return new ConditionImpl(`${this.param} > ${formatNumericOrParam(value)}`);
|
|
101
|
+
}
|
|
102
|
+
gte(value) {
|
|
103
|
+
return new ConditionImpl(`${this.param} >= ${formatNumericOrParam(value)}`);
|
|
104
|
+
}
|
|
105
|
+
lt(value) {
|
|
106
|
+
return new ConditionImpl(`${this.param} < ${formatNumericOrParam(value)}`);
|
|
107
|
+
}
|
|
108
|
+
lte(value) {
|
|
109
|
+
return new ConditionImpl(`${this.param} <= ${formatNumericOrParam(value)}`);
|
|
110
|
+
}
|
|
111
|
+
in(...values) {
|
|
112
|
+
const formatted = values.map(formatSetValue).join(', ');
|
|
113
|
+
return new ConditionImpl(`${this.param} IN {${formatted}}`);
|
|
114
|
+
}
|
|
115
|
+
like(pattern) {
|
|
116
|
+
return new ConditionImpl(`${this.param} LIKE ${pattern}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// --- Helpers ---
|
|
120
|
+
/** Check if an expression string contains a bare OR (not inside parens). */
|
|
121
|
+
function needsParensForAnd(expr) {
|
|
122
|
+
let depth = 0;
|
|
123
|
+
const upper = expr.toUpperCase();
|
|
124
|
+
for (let i = 0; i < upper.length; i++) {
|
|
125
|
+
if (upper[i] === '(') {
|
|
126
|
+
depth++;
|
|
127
|
+
}
|
|
128
|
+
else if (upper[i] === ')') {
|
|
129
|
+
depth--;
|
|
130
|
+
}
|
|
131
|
+
else if (depth === 0 && upper[i] === ' ' && upper.substring(i, i + 4) === ' OR ') {
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
/** Wrap a condition for use as an operand, adding parens if it contains AND or OR at top level. */
|
|
138
|
+
function wrapCondition(cond) {
|
|
139
|
+
const s = cond.toString();
|
|
140
|
+
if (needsParensForAnd(s)) {
|
|
141
|
+
return `(${s})`;
|
|
142
|
+
}
|
|
143
|
+
return s;
|
|
144
|
+
}
|
|
145
|
+
// --- Public API ---
|
|
146
|
+
/**
|
|
147
|
+
* Start building a condition on a parameter.
|
|
148
|
+
*
|
|
149
|
+
* @param param - The parameter name.
|
|
150
|
+
* @returns A builder for specifying the comparison operator and value.
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* when('os').eq('Windows') // os = Windows
|
|
154
|
+
* when('version').gt(3) // version > 3
|
|
155
|
+
* when('start_date').lt('end_date') // start_date < end_date
|
|
156
|
+
*/
|
|
157
|
+
export function when(param) {
|
|
158
|
+
return new ConditionStartImpl(param);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Negate a condition.
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* not(when('os').eq('win'))
|
|
165
|
+
* // NOT (os = win)
|
|
166
|
+
*
|
|
167
|
+
* not(allOf(when('os').eq('win'), when('browser').eq('safari')))
|
|
168
|
+
* // NOT (os = win AND browser = safari)
|
|
169
|
+
*/
|
|
170
|
+
export function not(condition) {
|
|
171
|
+
return new ConditionImpl(`NOT (${condition.toString()})`);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Combine conditions with AND.
|
|
175
|
+
*
|
|
176
|
+
* @example
|
|
177
|
+
* allOf(when('os').eq('win'), when('browser').eq('chrome'))
|
|
178
|
+
* // os = win AND browser = chrome
|
|
179
|
+
*/
|
|
180
|
+
export function allOf(...conditions) {
|
|
181
|
+
if (conditions.length === 0) {
|
|
182
|
+
throw new Error('allOf requires at least one condition');
|
|
183
|
+
}
|
|
184
|
+
if (conditions.length === 1) {
|
|
185
|
+
return conditions[0];
|
|
186
|
+
}
|
|
187
|
+
const parts = conditions.map((c) => {
|
|
188
|
+
const s = c.toString();
|
|
189
|
+
if (needsParensForAnd(s)) {
|
|
190
|
+
return `(${s})`;
|
|
191
|
+
}
|
|
192
|
+
return s;
|
|
193
|
+
});
|
|
194
|
+
return new ConditionImpl(parts.join(' AND '));
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Combine conditions with OR.
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* anyOf(when('os').eq('win'), when('os').eq('linux'))
|
|
201
|
+
* // os = win OR os = linux
|
|
202
|
+
*/
|
|
203
|
+
export function anyOf(...conditions) {
|
|
204
|
+
if (conditions.length === 0) {
|
|
205
|
+
throw new Error('anyOf requires at least one condition');
|
|
206
|
+
}
|
|
207
|
+
if (conditions.length === 1) {
|
|
208
|
+
return conditions[0];
|
|
209
|
+
}
|
|
210
|
+
const parts = conditions.map((c) => c.toString());
|
|
211
|
+
return new ConditionImpl(parts.join(' OR '));
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=constraint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraint.js","sourceRoot":"","sources":["../../js/constraint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* coverwise — Combinatorial test design API.
|
|
3
|
+
*
|
|
4
|
+
* Not just a generation tool — a test design engine.
|
|
5
|
+
* JSON-complete, stateless, decomposable.
|
|
6
|
+
*/
|
|
7
|
+
export type { Condition, ConditionStart, Constraint } from './constraint.js';
|
|
8
|
+
export { allOf, anyOf, not, when } from './constraint.js';
|
|
9
|
+
export type { ClassCoverage, CoverageReport, CoverwiseError, ExtendInput, GenerateInput, GenerateResult, GenerateStats, ModelStats, Parameter, ParameterValue, ParamStats, SubModel, Suggestion, TestCase, UncoveredTuple, WeightConfig, } from './types.js';
|
|
10
|
+
import type { CoverageReport, ExtendInput, GenerateInput, GenerateResult, ModelStats, Parameter, TestCase } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Initialize the WASM module. Must be called before using any API function.
|
|
13
|
+
* Safe to call multiple times — only loads once.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* await init();
|
|
17
|
+
* const result = generate({ parameters: [...] });
|
|
18
|
+
*/
|
|
19
|
+
export declare function init(): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Generate a covering array. One function, sensible defaults.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* const result = generate({
|
|
25
|
+
* parameters: [
|
|
26
|
+
* { name: "os", values: ["win", "mac", "linux"] },
|
|
27
|
+
* { name: "browser", values: ["chrome", "firefox", "safari"] },
|
|
28
|
+
* ],
|
|
29
|
+
* });
|
|
30
|
+
* // result.tests: [{ os: "win", browser: "chrome" }, ...]
|
|
31
|
+
* // result.coverage: 1.0
|
|
32
|
+
*/
|
|
33
|
+
export declare function generate(input: GenerateInput): GenerateResult;
|
|
34
|
+
/**
|
|
35
|
+
* Analyze t-wise coverage of an existing test suite.
|
|
36
|
+
* Use this to check coverage of manually written tests.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* const report = analyzeCoverage(
|
|
40
|
+
* [{ name: "os", values: ["win", "mac"] }, ...],
|
|
41
|
+
* [{ os: "win", browser: "chrome" }, ...],
|
|
42
|
+
* );
|
|
43
|
+
* // report.uncovered: [{ tuple: ["os=mac", "browser=chrome"], ... }]
|
|
44
|
+
*/
|
|
45
|
+
export declare function analyzeCoverage(parameters: Parameter[], tests: TestCase[], strength?: number): CoverageReport;
|
|
46
|
+
/**
|
|
47
|
+
* Extend an existing test suite with additional tests to improve coverage.
|
|
48
|
+
*
|
|
49
|
+
* mode: "strict" (default) keeps existing tests as-is.
|
|
50
|
+
* Only "strict" mode is supported (existing tests are kept as-is).
|
|
51
|
+
*/
|
|
52
|
+
export declare function extendTests(existing: TestCase[], input: ExtendInput): GenerateResult;
|
|
53
|
+
/**
|
|
54
|
+
* Get model statistics without running generation.
|
|
55
|
+
*/
|
|
56
|
+
export declare function estimateModel(input: GenerateInput): ModelStats;
|
|
57
|
+
/**
|
|
58
|
+
* Class-based wrapper around the coverwise API.
|
|
59
|
+
* Provides the same functionality as the free functions in an object-oriented style.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* const cw = await Coverwise.create();
|
|
63
|
+
* const result = cw.generate({ parameters: [...] });
|
|
64
|
+
*/
|
|
65
|
+
export declare class Coverwise {
|
|
66
|
+
private module;
|
|
67
|
+
private constructor();
|
|
68
|
+
/**
|
|
69
|
+
* Create a Coverwise instance.
|
|
70
|
+
* Reuses the shared WASM singleton — safe to call multiple times.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* const cw = await Coverwise.create();
|
|
74
|
+
* const result = cw.generate({ parameters: [...] });
|
|
75
|
+
*/
|
|
76
|
+
static create(): Promise<Coverwise>;
|
|
77
|
+
/**
|
|
78
|
+
* Generate a covering array. One function, sensible defaults.
|
|
79
|
+
*/
|
|
80
|
+
generate(input: GenerateInput): GenerateResult;
|
|
81
|
+
/**
|
|
82
|
+
* Analyze t-wise coverage of an existing test suite.
|
|
83
|
+
*/
|
|
84
|
+
analyzeCoverage(parameters: Parameter[], tests: TestCase[], strength?: number): CoverageReport;
|
|
85
|
+
/**
|
|
86
|
+
* Extend an existing test suite with additional tests to improve coverage.
|
|
87
|
+
*/
|
|
88
|
+
extendTests(existing: TestCase[], input: ExtendInput): GenerateResult;
|
|
89
|
+
/**
|
|
90
|
+
* Get model statistics without running generation.
|
|
91
|
+
*/
|
|
92
|
+
estimateModel(input: GenerateInput): ModelStats;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../js/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAI1D,YAAY,EACV,aAAa,EACb,cAAc,EACd,cAAc,EACd,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,UAAU,EACV,SAAS,EACT,cAAc,EACd,UAAU,EACV,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,cAAc,EACd,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EACV,cAAc,EAEd,WAAW,EACX,aAAa,EACb,cAAc,EACd,UAAU,EACV,SAAS,EACT,QAAQ,EACT,MAAM,YAAY,CAAC;AAcpB;;;;;;;GAOG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAe1C;AAyBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAI7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,SAAS,EAAE,EACvB,KAAK,EAAE,QAAQ,EAAE,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,cAAc,CAQhB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,cAAc,CAIpF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,UAAU,CAI9D;AAID;;;;;;;GAOG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAa;IAE3B,OAAO;IAIP;;;;;;;OAOG;WACU,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAKzC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc;IAI9C;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc;IAU9F;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,cAAc;IAIrE;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,UAAU;CAGhD"}
|
package/dist/js/index.js
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* coverwise — Combinatorial test design API.
|
|
3
|
+
*
|
|
4
|
+
* Not just a generation tool — a test design engine.
|
|
5
|
+
* JSON-complete, stateless, decomposable.
|
|
6
|
+
*/
|
|
7
|
+
export { allOf, anyOf, not, when } from './constraint.js';
|
|
8
|
+
let wasmModule = null;
|
|
9
|
+
let initPromise = null;
|
|
10
|
+
/**
|
|
11
|
+
* Initialize the WASM module. Must be called before using any API function.
|
|
12
|
+
* Safe to call multiple times — only loads once.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* await init();
|
|
16
|
+
* const result = generate({ parameters: [...] });
|
|
17
|
+
*/
|
|
18
|
+
export async function init() {
|
|
19
|
+
if (wasmModule) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (!initPromise) {
|
|
23
|
+
initPromise = (async () => {
|
|
24
|
+
// @ts-expect-error — WASM module is generated by `make wasm`, not present at type-check time.
|
|
25
|
+
// Resolves to dist/coverwise.js at runtime (dist/js/../coverwise.js).
|
|
26
|
+
// In vitest, aliased via vitest.config.ts resolve.alias.
|
|
27
|
+
const createModule = await import('../coverwise.js');
|
|
28
|
+
const mod = await createModule.default();
|
|
29
|
+
return mod;
|
|
30
|
+
})();
|
|
31
|
+
}
|
|
32
|
+
wasmModule = await initPromise;
|
|
33
|
+
}
|
|
34
|
+
function getModule() {
|
|
35
|
+
if (!wasmModule) {
|
|
36
|
+
throw new Error('coverwise WASM module not initialized. Call await init() first.');
|
|
37
|
+
}
|
|
38
|
+
return wasmModule;
|
|
39
|
+
}
|
|
40
|
+
// --- Result Checking ---
|
|
41
|
+
function checkResult(result) {
|
|
42
|
+
const r = result;
|
|
43
|
+
if (r && r.error === true) {
|
|
44
|
+
const err = {
|
|
45
|
+
code: r.code ?? 'INVALID_INPUT',
|
|
46
|
+
message: r.message ?? 'Unknown error',
|
|
47
|
+
};
|
|
48
|
+
throw err;
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
// --- Core API ---
|
|
53
|
+
/**
|
|
54
|
+
* Generate a covering array. One function, sensible defaults.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* const result = generate({
|
|
58
|
+
* parameters: [
|
|
59
|
+
* { name: "os", values: ["win", "mac", "linux"] },
|
|
60
|
+
* { name: "browser", values: ["chrome", "firefox", "safari"] },
|
|
61
|
+
* ],
|
|
62
|
+
* });
|
|
63
|
+
* // result.tests: [{ os: "win", browser: "chrome" }, ...]
|
|
64
|
+
* // result.coverage: 1.0
|
|
65
|
+
*/
|
|
66
|
+
export function generate(input) {
|
|
67
|
+
const mod = getModule();
|
|
68
|
+
const result = checkResult(mod.generate(input));
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Analyze t-wise coverage of an existing test suite.
|
|
73
|
+
* Use this to check coverage of manually written tests.
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* const report = analyzeCoverage(
|
|
77
|
+
* [{ name: "os", values: ["win", "mac"] }, ...],
|
|
78
|
+
* [{ os: "win", browser: "chrome" }, ...],
|
|
79
|
+
* );
|
|
80
|
+
* // report.uncovered: [{ tuple: ["os=mac", "browser=chrome"], ... }]
|
|
81
|
+
*/
|
|
82
|
+
export function analyzeCoverage(parameters, tests, strength) {
|
|
83
|
+
const mod = getModule();
|
|
84
|
+
const result = checkResult(mod.analyzeCoverage(parameters, tests, strength ?? 2));
|
|
85
|
+
// When there are no tuples (e.g. fewer parameters than strength), coverage is vacuously 1.0.
|
|
86
|
+
if (result.totalTuples === 0) {
|
|
87
|
+
result.coverageRatio = 1.0;
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Extend an existing test suite with additional tests to improve coverage.
|
|
93
|
+
*
|
|
94
|
+
* mode: "strict" (default) keeps existing tests as-is.
|
|
95
|
+
* Only "strict" mode is supported (existing tests are kept as-is).
|
|
96
|
+
*/
|
|
97
|
+
export function extendTests(existing, input) {
|
|
98
|
+
const mod = getModule();
|
|
99
|
+
const result = checkResult(mod.extendTests(existing, input));
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get model statistics without running generation.
|
|
104
|
+
*/
|
|
105
|
+
export function estimateModel(input) {
|
|
106
|
+
const mod = getModule();
|
|
107
|
+
const result = checkResult(mod.estimateModel(input));
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
// --- Class-based API ---
|
|
111
|
+
/**
|
|
112
|
+
* Class-based wrapper around the coverwise API.
|
|
113
|
+
* Provides the same functionality as the free functions in an object-oriented style.
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* const cw = await Coverwise.create();
|
|
117
|
+
* const result = cw.generate({ parameters: [...] });
|
|
118
|
+
*/
|
|
119
|
+
export class Coverwise {
|
|
120
|
+
constructor(module) {
|
|
121
|
+
this.module = module;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Create a Coverwise instance.
|
|
125
|
+
* Reuses the shared WASM singleton — safe to call multiple times.
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* const cw = await Coverwise.create();
|
|
129
|
+
* const result = cw.generate({ parameters: [...] });
|
|
130
|
+
*/
|
|
131
|
+
static async create() {
|
|
132
|
+
await init();
|
|
133
|
+
return new Coverwise(wasmModule);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Generate a covering array. One function, sensible defaults.
|
|
137
|
+
*/
|
|
138
|
+
generate(input) {
|
|
139
|
+
return checkResult(this.module.generate(input));
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Analyze t-wise coverage of an existing test suite.
|
|
143
|
+
*/
|
|
144
|
+
analyzeCoverage(parameters, tests, strength) {
|
|
145
|
+
const result = checkResult(this.module.analyzeCoverage(parameters, tests, strength ?? 2));
|
|
146
|
+
if (result.totalTuples === 0) {
|
|
147
|
+
result.coverageRatio = 1.0;
|
|
148
|
+
}
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Extend an existing test suite with additional tests to improve coverage.
|
|
153
|
+
*/
|
|
154
|
+
extendTests(existing, input) {
|
|
155
|
+
return checkResult(this.module.extendTests(existing, input));
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get model statistics without running generation.
|
|
159
|
+
*/
|
|
160
|
+
estimateModel(input) {
|
|
161
|
+
return checkResult(this.module.estimateModel(input));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../js/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ModelStats as InternalModelStats } from '../../src/ts/model/generate-options.js';
|
|
2
|
+
import { type GenerateOptions as InternalGenerateOptions } from '../../src/ts/model/generate-options.js';
|
|
3
|
+
import { Parameter as InternalParameter } from '../../src/ts/model/parameter.js';
|
|
4
|
+
import type { GenerateResult as InternalGenerateResult, TestCase as InternalTestCase } from '../../src/ts/model/test-case.js';
|
|
5
|
+
import type { CoverageReport as InternalCoverageReport } from '../../src/ts/validator/coverage-validator.js';
|
|
6
|
+
import type { GenerateInput, CoverageReport as PublicCoverageReport, GenerateResult as PublicGenerateResult, ModelStats as PublicModelStats, Parameter as PublicParameter, TestCase as PublicTestCase } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Convert public Parameter[] to internal Parameter[].
|
|
9
|
+
*
|
|
10
|
+
* Normalizes all values to strings, extracts invalid flags and aliases
|
|
11
|
+
* from ParameterValue objects.
|
|
12
|
+
*/
|
|
13
|
+
export declare function toInternalParams(params: PublicParameter[]): InternalParameter[];
|
|
14
|
+
/**
|
|
15
|
+
* Convert a public TestCase (key-value map) to an internal TestCase (index array).
|
|
16
|
+
*/
|
|
17
|
+
export declare function toInternalTestCase(tc: PublicTestCase, params: InternalParameter[]): InternalTestCase;
|
|
18
|
+
/**
|
|
19
|
+
* Convert a full GenerateInput to internal GenerateOptions.
|
|
20
|
+
*/
|
|
21
|
+
export declare function toInternalOptions(input: GenerateInput, params: InternalParameter[]): InternalGenerateOptions;
|
|
22
|
+
/**
|
|
23
|
+
* Convert an internal TestCase (index array) to a public TestCase (key-value map).
|
|
24
|
+
*
|
|
25
|
+
* Uses displayName for alias rotation, matching the WASM TestCaseToJS behavior.
|
|
26
|
+
*/
|
|
27
|
+
export declare function toPublicTestCase(tc: InternalTestCase, params: InternalParameter[], rotation: number): PublicTestCase;
|
|
28
|
+
/**
|
|
29
|
+
* Convert an internal GenerateResult to a public GenerateResult.
|
|
30
|
+
*/
|
|
31
|
+
export declare function toPublicResult(result: InternalGenerateResult, params: InternalParameter[], strength: number): PublicGenerateResult;
|
|
32
|
+
/**
|
|
33
|
+
* Convert an internal CoverageReport to a public CoverageReport.
|
|
34
|
+
*/
|
|
35
|
+
export declare function toPublicCoverageReport(report: InternalCoverageReport): PublicCoverageReport;
|
|
36
|
+
/**
|
|
37
|
+
* Convert an internal ModelStats to a public ModelStats.
|
|
38
|
+
*/
|
|
39
|
+
export declare function toPublicModelStats(stats: InternalModelStats): PublicModelStats;
|
|
40
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../js/pure/adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,IAAI,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC/F,OAAO,EAGL,KAAK,eAAe,IAAI,uBAAuB,EAChD,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,SAAS,IAAI,iBAAiB,EAAc,MAAM,iCAAiC,CAAC;AAC7F,OAAO,KAAK,EACV,cAAc,IAAI,sBAAsB,EACxC,QAAQ,IAAI,gBAAgB,EAE7B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EAAE,cAAc,IAAI,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AAC7G,OAAO,KAAK,EACV,aAAa,EAEb,cAAc,IAAI,oBAAoB,EACtC,cAAc,IAAI,oBAAoB,EACtC,UAAU,IAAI,gBAAgB,EAC9B,SAAS,IAAI,eAAe,EAC5B,QAAQ,IAAI,cAAc,EAE3B,MAAM,aAAa,CAAC;AAwBrB;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,iBAAiB,EAAE,CA4C/E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,iBAAiB,EAAE,GAC1B,gBAAgB,CAUlB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,iBAAiB,EAAE,GAC1B,uBAAuB,CA6BzB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,gBAAgB,EACpB,MAAM,EAAE,iBAAiB,EAAE,EAC3B,QAAQ,EAAE,MAAM,GACf,cAAc,CAQhB;AAcD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,iBAAiB,EAAE,EAC3B,QAAQ,EAAE,MAAM,GACf,oBAAoB,CAkCtB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,sBAAsB,GAAG,oBAAoB,CAO3F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,gBAAgB,CAe9E"}
|