From d8eaa110c99c2d646a470c8d596cbf01b0f6955a Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sun, 4 Oct 2026 07:20:56 +0200 Subject: [PATCH] AffineTests: af_range encloses on every overflowed form, the infinity on the NaN side Co-Authored-By: Claude Sonnet 5.5 --- packages/cultmath/tests/CultMath.Tests/AffineTests.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/cultmath/tests/CultMath.Tests/AffineTests.cs b/packages/cultmath/tests/CultMath.Tests/AffineTests.cs index f55bf359..51bcacc5 100644 --- a/packages/cultmath/tests/CultMath.Tests/AffineTests.cs +++ b/packages/cultmath/tests/CultMath.Tests/AffineTests.cs @@ -627,7 +627,12 @@ public sealed class AffineTests foreach (var e in odd) { var range = af_range(new float3(x0, a, e)); - if (float.IsNaN(range.x) || float.IsNaN(range.y)) + // The range encloses x0 -+ (|a| + e) wherever that is a number, and is the whole line on the + // side where it is not (infinity minus infinity, a NaN component): the infinity on that side. + var spread = Math.Abs((double)a) + e; + var enclosesLow = double.IsNaN(x0 - spread) ? range.x == float.NegativeInfinity : range.x <= x0 - spread; + var enclosesHigh = double.IsNaN(x0 + spread) ? range.y == float.PositiveInfinity : range.y >= x0 + spread; + if (!enclosesLow || !enclosesHigh) misses.Add($"af_range(({x0}, {a}, {e})) = {range}"); }