Skip to main content

Compatible PICT Online

A browser-based pairwise test case generator compatible with Microsoft PICT model format. Write your model, click Generate, and get optimized test combinations instantly — no installation required.

Privacy

All processing runs entirely in your browser. No data is sent to any server. Your model text is saved in the browser's session storage so it persists across page reloads, but it is automatically cleared when you close the tab.

Loading PICT demo…
PICT superset

This tool uses CoverTable's model format, which is a superset of Microsoft PICT. It supports extensions such as arithmetic expressions ([A] * [B] > 100, ([A] + 1) * [B] <= 500) and # comments in constraints. Models using these extensions may not run in the original PICT tool.


How it works

PictModel parses a PICT-format model into parameters, sub-models, and constraint filters, and lets you generate rows directly from it:

import { PictModel } from "covertable/pict";

const model = new PictModel(`
machine: iPhone, Pixel, XPERIA, ZenFone, Galaxy
os: iOS, Android
browser: FireFox, Chrome, Safari

IF [machine] = "iPhone" THEN [os] = "iOS";
IF [os] = "iOS" THEN [machine] = "iPhone";
`);

const rows = model.make();

If you only want to apply constraints to factors you already have in code, you can pass model.constraints to make:

import { make } from "covertable";
import { PictModel } from "covertable/pict";

const machine = ["iPhone", "Pixel", "XPERIA", "ZenFone", "Galaxy"];
const os = ["iOS", "Android"];
const browser = ["FireFox", "Chrome", "Safari"];

const model = new PictModel(`
machine: iPhone, Pixel, XPERIA, ZenFone, Galaxy
os: iOS, Android
browser: FireFox, Chrome, Safari

IF [machine] = "iPhone" THEN [os] = "iOS";
IF [os] = "iOS" THEN [machine] = "iPhone";
`);

make({ machine, os, browser }, {
constraints: model.constraints,
});

Supported Syntax

PictModel supports the full PICT model file format. See the PictModel reference for the complete table.

Constraints

SyntaxExampleDescription
IF ... THEN ...IF [os] = "iOS" THEN [machine] = "iPhone"Conditional constraint
IF ... THEN ... ELSE ...IF [os] = "iOS" THEN [machine] = "iPhone" ELSE [machine] <> "iPhone"With else branch
Unconditional[machine] <> [os];Always-applied invariant (no IF)
= / <>[os] = "iOS" / [os] <> "Android"Equality / Inequality
> / < / >= / <=[price] > 100Numeric comparisons
AND / OR / NOT[os] = "iOS" AND [browser] = "Safari"Logical operators with parentheses
LIKE[machine] LIKE "i*"Pattern matching with * and ?
IN[os] IN {"iOS", "Android"}Set membership

Parameters

SyntaxExampleDescription
BasicType: A, B, CStandard parameter declaration
QuotedMsg: "hello, world"Required for values with commas
AliasesOS: Windows | Win, LinuxMultiple names for the same value
Invalid (~)Type: A, ~BadNegative-test value (at most one per row)
WeightBrowser: Chrome (10), FirefoxBias value selection during completion
ReferenceB: <A>, extraInherit values from another parameter
Sub-model{ A, B, C } @ 3Apply different N-wise strength to a group