CultLib/packages/cultmath/tests/CultMath.Tests
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Meta Vens f6fb589ac3 Fix batch 1 (cellular/smin_grad): exact search, decorrelated id, finite F2=0
Cut 2a-i fix batch 1, findings F1, F3, F4, F5, F6, F7 (Soul falsification of
the first landing):

- cellular now searches a provably exact 5x5x5 neighbourhood (radius 2), not
  3x3x3: 3x3x3 missed the true F2 for 9 of 400,000 sampled points. The
  comment in math.cs proves 5x5x5 always contains the true F1 and F2 (both
  are always < sqrt(3), every excluded cell is always > 2). A cheap
  position-only lower-bound prune skips the pcg3d/jitter/distance work for
  cells that provably cannot beat the running F2, without changing any
  output bit (F6).
- F2 = 0 now gets the same degenerate-gradient guard F1 = 0 already had,
  fixing a NaN that was reachable past |p| of about 2^23 (F3).
- id now comes from pcg4d over the winning cell alone, never from the pcg3d
  hash that produced that cell's jitter, so id and jitter are no longer
  deterministic functions of each other (F4).
- cellular_unit maps the top 24 bits instead of a plain divide-by-2^32, so
  the mapping is always inside [0, 1); the old formula rounded
  0xFFFFFF80..0xFFFFFFFF up to exactly 1.0f (F7).
- Central-difference tolerances tightened from 0.02 to 3e-4 (measured float
  noise at the committed eps is about 6e-5), and cellular's own gradient
  test now differentiates cellular's RETURNED .w values instead of a
  duplicate FindF1F2 search, so a mutant that corrupts only the returned
  gradient can't hide behind an independently-computed value (F1, F5).
- The struct-mirror comparison in HlslSourceCompatibilityTests now checks
  field name and declared type in declaration order, not just position, so
  a reordered-and-relabelled mirror struct (H2) or a renamed/retyped one
  (H3) both fail the walk instead of surviving on values alone (F2).
- FindF1F2 widened to a true independent 7x7x7 brute-force oracle; new tests
  pin production's exact agreement with it, the pruned search's bit-for-bit
  equivalence to an unpruned 5x5x5 reference, no NaN at 2^24, and id's
  correlation with jitter under 0.05.
- Comment/doc fix: smin_grad is Quilez's quadratic-polynomial smin, not
  cubic.

Both shaders/CultMath.hlsl and unity/.../Shaders/CultMath.hlsl stay
byte-identical.

Manually verified mutants M9 (grad1 x 1.01), M16 (grad2 x 1.01), and M18 (id
from hash.y) all die against these tests; H2/H3 struct mutants die via the
new comparator tests. Local dotnet test: 191/191 passing. FXC cs_5_0 compile
of a scratch kernel using both cultmath_smin_grad and cultmath_cellular
succeeds.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-25 20:40:28 +02:00
..
BatchMathTests.cs Test that the float2 radial falloff overload accumulates, not assigns 2026-09-24 20:13:05 +02:00
CellularAndSminGradTests.cs Fix batch 1 (cellular/smin_grad): exact search, decorrelated id, finite F2=0 2026-09-25 20:40:28 +02:00
CultMath.Tests.csproj Compile the real HLSL mirror as C# and with dxc; fix its errors 2026-09-14 13:57:03 +02:00
CultMath.Tests.csproj.meta Move CultMath into the CultLib monorepo 2026-08-26 17:35:51 +02:00
FirstOrderInterceptTests.cs Fix a tolerance-overload bug that made intercept precision asserts inert 2026-09-24 19:38:30 +02:00
HlslMirrorTests.cs Extend the HLSL mirror comparison to one struct return shape 2026-09-25 19:18:21 +02:00
HlslMirrorTests.cs.meta Move CultMath into the CultLib monorepo 2026-08-26 17:35:51 +02:00
HlslSemanticsTests.cs Add PCG integer hashes to CultMath and release 0.2.3 2026-09-14 18:19:53 +02:00
HlslSemanticsTests.cs.meta Make CultMath HLSL-shaped: writable components, bool-vector comparisons 2026-09-14 13:29:59 +02:00
HlslSourceCompatibilityTests.cs Fix batch 1 (cellular/smin_grad): exact search, decorrelated id, finite F2=0 2026-09-25 20:40:28 +02:00
HlslSourceCompatibilityTests.cs.meta Make CultMath HLSL-shaped: writable components, bool-vector comparisons 2026-09-14 13:29:59 +02:00
MathTests.cs Say what the cell-mass test proves, and what it does not 2026-09-22 21:43:52 +02:00
MathTests.cs.meta Move CultMath into the CultLib monorepo 2026-08-26 17:35:51 +02:00
stryker-config.json Pin mtp test-runner for CultMath and document mutation testing 2026-09-22 21:24:05 +02:00
VectorEqualityTests.cs Tie the scalar comparison overloads too, not just vector-vector 2026-09-24 19:49:23 +02:00