Skip to main content

N-Wise Test Data Generation

N-wise generation creates a covering set for enum columns. For a selected value of n, every value tuple across every group of n enum columns should appear at least once.

The Generate Combinations dialog only offers valid n values: from 2 up to the number of enum columns in the current schema.

Non-enum columns are still generated normally for each emitted combination row. Only enum columns participate in the finite n-wise coverage model.

When to use n-wise generation​

Use n-wise generation when:

  • You have two or more enum fields with finite value sets.
  • You want systematic coverage of value interactions.
  • Full Cartesian generation would create too many rows.
  • You want to compare pairwise, 3-wise, 4-wise, or stronger coverage before choosing the right test-data volume.

For n = 2, the generator covers every pair of enum values across every pair of enum columns. For n = 3, it covers every triplet, and so on. When n equals the number of enum columns, the result is full Cartesian coverage for those enum columns.

Strategies​

The dialog orders available strategies by the lowest-row evidence from the current comparison scenarios for the selected n. The best row-count choice can change by strength, so the order changes when you change n.

StrategyAvailable forWhen to pick itReferences
Greedy2-wise and higherPick as the general default for low rows with low runtime. It led the current 3-wise and 5-wise samples overall.Greedy covering-array family
IPOG-style2-wise and higherPick for predictable low runtime at higher strengths. It tracked Greedy closely and tied it on some larger samples.NIST IPOG
AETG-style2-wise and higherPick when you can spend more runtime to chase compact output. It was strongest for 4-wise row count in the samples.AETG reference summary
PICT-inspired GCD2-wise and higherPick for 2-wise when row count matters. It produced the fewest pairwise rows in the current comparison samples.Microsoft PICT
Bach AllPairs2-wise onlyPick for 2-wise when you want Bach Allpairs-style pair-frequency balancing. It targets lower row counts than the simple legacy pairwise algorithm while staying fast.James Bach Satisfice AllPairs
Hypergraph vertex2-wise and higherPick as the graph-informed comparator that stays closer on rows than compatibility graph, with higher runtime.Covering arrays on hypergraphs
Compatibility graph2-wise and higherPick for comparison against graph-style compatibility scoring. It was usually behind the best row-count choices.NIST covering arrays
Pairwise (simple)2-wise onlyPick for legacy-compatible 2-wise output. It is stable and familiar, though PICT, AETG, and Bach AllPairs used fewer rows in sample runs.NIST covering arrays

Scenario 6x3 Data Set​

For Cartesian all combinations the number of rows would be 729.

P1
enum("1.1","1.2","1.3")
P2
enum("2.1","2.2","2.3")
P3
enum("3.1","3.2","3.3")
P4
enum("4.1","4.2","4.3")
P5
enum("5.1","5.2","5.3")
P6
enum("6.1","6.2","6.3")

Scenario 6x3 - Strength 2​

AlgorithmRowsTotal tuplesCovered tuplesCoverage %Runtime ms
pict-gcd13135135100.02
aetg14135135100.010
hypergraph-vertex14135135100.06
compatibility-graph16135135100.03
bach-allpairs16135135100.0n/a
greedy17135135100.02
ipog17135135100.01
pairwise17135135100.0n/a

Scenario 6x3 - Strength 3​

AlgorithmRowsTotal tuplesCovered tuplesCoverage %Runtime ms
aetg45540540100.036
greedy48540540100.03
pict-gcd48540540100.04
hypergraph-vertex50540540100.021
compatibility-graph51540540100.021
ipog58540540100.02

Scenario 6x3 - Strength 4​

AlgorithmRowsTotal tuplesCovered tuplesCoverage %Runtime ms
aetg13412151215100.090
greedy13712151215100.010
hypergraph-vertex14112151215100.0145
pict-gcd14212151215100.08
compatibility-graph15312151215100.0100
ipog16912151215100.04

Scenario 6x3 - Strength 5​

AlgorithmRowsTotal tuplesCovered tuplesCoverage %Runtime ms
greedy28814581458100.04
aetg30814581458100.0108
ipog31814581458100.04
hypergraph-vertex33014581458100.0421
pict-gcd33114581458100.06
compatibility-graph36814581458100.0405

Scenario 6x3 - Strength 6​

AlgorithmRowsTotal tuplesCovered tuplesCoverage %Runtime ms
aetg729729729100.00
compatibility-graph729729729100.01
greedy729729729100.00
hypergraph-vertex729729729100.01
ipog729729729100.00
pict-gcd729729729100.00

Scenario 6x4 Data Set​

For Cartesian all combinations the number of rows would be 4096.

P1
enum("1.1","1.2","1.3","1.4")
P2
enum("2.1","2.2","2.3","2.4")
P3
enum("3.1","3.2","3.3","3.4")
P4
enum("4.1","4.2","4.3","4.4")
P5
enum("5.1","5.2","5.3","5.4")
P6
enum("6.1","6.2","6.3","6.4")

Scenario 6x4 - Strength 2​

AlgorithmRowsTotal tuplesCovered tuplesCoverage %Runtime ms
aetg23240240100.018
pict-gcd23240240100.03
compatibility-graph24240240100.04
hypergraph-vertex26240240100.06
bach-allpairs28240240100.0n/a
greedy28240240100.01
ipog28240240100.01
pairwise28240240100.0n/a

Scenario 6x4 - Strength 3​

AlgorithmRowsTotal tuplesCovered tuplesCoverage %Runtime ms
greedy6412801280100.04
ipog6412801280100.03
aetg10512801280100.0112
pict-gcd11012801280100.011
hypergraph-vertex11512801280100.0122
compatibility-graph12012801280100.060

Scenario 6x4 - Strength 4​

AlgorithmRowsTotal tuplesCovered tuplesCoverage %Runtime ms
aetg42038403840100.0320
pict-gcd44038403840100.025
hypergraph-vertex44638403840100.02184
greedy44838403840100.029
ipog44838403840100.014
compatibility-graph49538403840100.01017

Scenario 6x4 - Strength 5​

AlgorithmRowsTotal tuplesCovered tuplesCoverage %Runtime ms
greedy102461446144100.023
ipog102461446144100.023
aetg133561446144100.01477
hypergraph-vertex137561446144100.011946
pict-gcd141461446144100.089
compatibility-graph153461446144100.09611

Scenario 6x4 - Strength 6​

AlgorithmRowsTotal tuplesCovered tuplesCoverage %Runtime ms
aetg409640964096100.02
compatibility-graph409640964096100.02
greedy409640964096100.03
hypergraph-vertex409640964096100.03
ipog409640964096100.03
pict-gcd409640964096100.03