Skip to content

Parity Tests ​

Golden-scenario tests validate that each TypeScript engine module produces the same results as the Excel workbook reference (S2D_Capacity_Calculator.xlsx).

Run all parity tests with npm test.

Tolerance ​

Storage comparisons use a tolerance of ±0.02 TB for all modules.


Capacity parity — 20 scenarios ​

File: src/engine/__tests__/capacity.parity.test.ts

Tests computeCapacity() in src/engine/capacity.ts. Covers raw pool, resiliency factor, efficiency factor, reserve volumes, and effective usable TB across all four resiliency types and a range of node + drive configurations.

#NodesDrives/nodeCap (TB)ResiliencyReserveExpected (TB)
01244.02-way012.32
02468.02-way073.92
034810.03-way165.87
046810.03-way0123.20
0581010.02-way2246.40
0681212.0MAP0443.52
0716243.842-way41,053.27
08442.02-way012.32
09662.03-way018.48
10884.0MAP098.56
11464.03-way129.33
12288.02-way049.28
134126.0MAP0110.88
1461012.03-way2109.73
158164.02-way0197.12
161682.03-way0131.07
17466.02-way055.44
18244.02-way012.32
19488.0MAP173.52
208128.03-way0164.57

AVD parity — 12 scenarios ​

File: src/engine/__tests__/avd.parity.test.ts

Tests computeAvd() in src/engine/avd.ts. Covers session host density and count, vCPU and memory totals, profile storage sizing, user type mix weighted average, growth buffer, Office Container, data disk per host, concurrent vs total user sizing split, avdSessionHostsNeeded override, and single-session VDI mode.

#WorkloadUsersConcurrentNotes
01light100—sessionHostCount=7, vCPUs=14, profile=3.91 TB
02light1,000200host sizing from concurrent; profile from totalUsers
03medium500—sessionHostCount=63, vCPUs=252
04medium500—user type mix 30/50/20 → effectiveProfileSizeGB=41
05heavy200—sessionHostCount=50, vCPUs=400
06power50—sessionHostCount=25, OS disk=6.25 TB
07medium100—single-session VDI: usersPerHost=1, hosts=100
08medium100—20% growth buffer → profile=4.69 TB
09medium100—Office Container 20 GB enabled
10medium100—avdSessionHostsNeeded override = 20
11medium100—100 GB data disk per host
12medium1000concurrentUsers=0 falls back to totalUsers

SOFS parity — 8 scenarios ​

File: src/engine/__tests__/sofs.parity.test.ts

Tests computeSofs() in src/engine/sofs.ts. Covers profile demand sizing, internal mirror compounding (1×/2×/3×), sofsProfileDemandTb override, IOPS with concurrent users vs fallback to userCount, auto-size drive calculation, and redirected folder storage additive to total.

#UsersMirrorNotes
01500three-wayprofile=19.53 TB, footprint=58.59 TB
02500two-wayfootprint=39.06 TB
03500simplefootprint = totalStorage (factor=1)
04500three-waysofsProfileDemandTb override=10 TB → footprint=30 TB
05500three-way200 concurrent users → steadyStateIops=2000, stormIops=10000
06500three-wayconcurrentUsers=0 → fallback to userCount → steadyStateIops=5000
07500three-wayauto-size: 4 drives/node × 2 nodes → required drive size=7.32 TB
08500three-way5 GB redirected folders → totalStorage=21.97 TB, footprint=65.92 TB

Compute parity — 6 scenarios ​

File: src/engine/__tests__/compute.parity.test.ts

Tests computeCompute() in src/engine/compute.ts. Covers hyperthreading enabled vs disabled (logical vCPU doubling), N+1 one-node-loss model, system reserved RAM per-node scaling, NUMA domain estimate, and vCPU oversubscription ratio.

#NodesCores/nodeHTNotes
01416yeslogicalCores=128, usableVCpus=496
02416nologicalCores=64, usableVCpus=240 (half)
03416yesN+1: usableVCpusN1=372, usableMemoryGBN1=744
04416yessystemReservedMemoryGB=32 → usableMemoryGB=896
05616yesnumaDomainsEstimate=12
06416yesratio=8 → usableVCpus=1008, usableVCpusN1=756

Released under the MIT License.