Marvin32 (.NET string.GetHashCode) fixed-pair collision check
hash: dotnet/runtime System/Marvin.cs at tag v10.0.12 (commit 4271d88e), transcribed; runtime executed for the vectors: .NET 10.0.12
validation: corefx MarvinTests.cs 64-bit vectors (seeds 4fb61a001bdbcc, 804fb61a001bdbcc, 804fb61a801bdbcc): 30/30 PASS
validation: floodyberry Marvin32.c "Abcdefg" (UTF-16LE) seed 5d70d359c498b3f8: ba627c81 expected ba627c81 PASS
validation: .NET 10.0.12 runtime vectors from dotnet_check.txt (4 seeds x lengths 0..15): 64/64 PASS
seed protocol: string.GetHashCode() = Marvin.ComputeHash32(UTF-16LE bytes, 2*Length, (uint)seed, (uint)(seed >> 32)) with seed = Marvin.DefaultSeed,
  64 random bits drawn once per process (per instance for RandomizedStringEqualityComparer); sampled here as uniform 64-bit values from xoshiro256**.

pair B / Marvin32 .NET 10.0.12 (L = 1 word)
M  (8 B) = 6100610061006100   "aaaa"
M' (8 B) = 7211721150ef4fef   U+1172 U+1172 U+EF50 U+EF4F
  mechanism: one-word pair, word differences (+0x11111111, -0x11111111), a period-4 pattern
  fixed by rotl 20; cancels for about one seed in 2^22.5 (the L = 1 witness).
recorded colliding seed c4cec22cffed4464: H(M)=22e699d5 H(M')=22e699d5 expected 22e699d5 PASS
random seeds: N = 17179869184 (2^34), rng seed 1
collisions = 2844 / 17179869184; rate = 1.65542587638e-07; log2(rate) = -22.526294; sampled score = log2(L) - log2(rate) = 22.526294
of which full 64-bit state collisions: 2839
first sampled colliding seed c4cec22cffed4464: H(M)=22e699d5 H(M')=22e699d5

real	16m0.408s
user	2m59.010s
sys	0m0.001s
