Skip to content

Latest commit

 

History

History
68 lines (51 loc) · 3.86 KB

parity.md

File metadata and controls

68 lines (51 loc) · 3.86 KB

Parity verification

MVerb.Net is verified against upstream MVerb commit 9f9512e9d990fcf265e00fc7c2ee47ad20c8019f. The repository pins that revision as reference/mverb; regeneration scripts reject another checkout before compiling the harness. The checked-in MVerb.h has Git blob ID 1e895dc8777c62eff627107c848355d1bc487490.

Contract

The native harness instantiates the upstream MVerb<float> directly and captures raw IEEE 754 binary32 input and output bit patterns rather than formatted decimal values. Twelve scenarios process 153,600 stereo frames and record 307,265 outputs or parameter observations. They cover:

  • constructor defaults and every parameter mapping, including out-of-range values and an unknown parameter;
  • long asymmetric impulses, deterministic stereo noise, and per-channel in-place processing;
  • 8, 32, 44.1, 48, 96, and 192 kHz sample rates;
  • every control's signal path and one-sample, varied, and large block partitions;
  • reset, sample-rate reconfiguration, size reconfiguration, and zero-frame lifecycle behavior;
  • enough frames to cross control-rate boundaries and populate the early-reflection and late-tank delays.

The managed implementation is bit-identical to the GCC fixture for all 307,265 observations. No numeric epsilon is used. GCC is the sole trajectory oracle because the managed runtime and the native GCC profile produce the same single-precision path on the verified platform. Fresh GCC capture remains the platform-specific exact oracle in Linux CI.

MSVC is retained only as a native portability profile. CI compiles and runs upstream under MSVC, then requires the exact scenario set, bit-identical inputs, equal output lengths, matching finite/non-finite classification, and bit-identical compiler-stable parameter/default paths. Its feedback output is not compared with managed output and no numeric tolerance is accepted. The full capture is transient; provenance, input hashes, stable observations, compiler-flag experiments, and per-scenario divergence measurements are preserved in the compact MSVC portability report.

Committed fixture

Fixture Purpose SHA-256
reference.gcc.json Sole bit-exact managed trajectory oracle generated with GCC C3B19849240DB60823859C11D3714747C460B5A71657C035F2FCBFA5CF4B8636

Fixture metadata records the compiler, compiler version, platform, and pointer width. It deliberately excludes machine names, user names, and absolute paths.

Regenerate on Windows

Install CMake and a C++17 compiler. Visual Studio is discovered through vswhere; another compiler can be selected explicitly.

git submodule update --init --recursive
./tools/parity/scripts/regenerate-parity.ps1 -Profile msvc -OutputPath ./artifacts/parity/reference.msvc.json
./tools/parity/scripts/regenerate-parity.ps1 -Profile gcc -Compiler <path-to-g++.exe> -OutputPath ./artifacts/parity/reference.gcc.json
./tools/parity/scripts/verify-msvc-portability.ps1 -MsvcFixture ./artifacts/parity/reference.msvc.json

Regenerate on Linux

git submodule update --init --recursive
MVERB_PARITY_OUTPUT="$PWD/artifacts/parity/reference.gcc.json" ./tools/parity/scripts/regenerate-parity.sh

Set MVERB_PARITY_GCC_FIXTURE to an absolute generated GCC fixture path before running the managed tests. MSVC captures are validated separately by verify-msvc-portability.ps1 and are never loaded as managed parity data.

Review fixture changes

A GCC fixture change is a reviewable compatibility event. Confirm the submodule commit, compiler identity, Release build configuration, 12-scenario identifier set, native harness source, and all managed test results before replacing it. An MSVC portability change requires regenerating and reviewing the compact divergence report, but the full MSVC fixture is not committed. Native executables and build directories are never committed or packed.