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