From 6b89019c02a11eff11cbc4f1e6351f15499f3056 Mon Sep 17 00:00:00 2001 From: soul Date: Fri, 23 Oct 2026 04:24:32 +0200 Subject: [PATCH] Economy checks: an undefined radius refuses; factor refusal says why --- Assets/Scripts/ServerShared/EconomyChecks.cs | 1 + tests/Aetheria.Shared.Tests/EconomyChecksTests.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/ServerShared/EconomyChecks.cs b/Assets/Scripts/ServerShared/EconomyChecks.cs index 058a61e24..13f7f5d78 100644 --- a/Assets/Scripts/ServerShared/EconomyChecks.cs +++ b/Assets/Scripts/ServerShared/EconomyChecks.cs @@ -317,6 +317,7 @@ public static class EconomyChecks var component = Enumerable.Range(0, n).Where(i => reach[start, i] && reach[i, start]).ToList(); foreach (var i in component) done[i] = true; var rho = Irreducible(a, component); + if (double.IsNaN(rho)) rho = double.PositiveInfinity; if (rho > best) { best = rho; bestComponent = component; } } return (best, bestComponent); diff --git a/tests/Aetheria.Shared.Tests/EconomyChecksTests.cs b/tests/Aetheria.Shared.Tests/EconomyChecksTests.cs index 8be6ebd56..9d9f92f22 100644 --- a/tests/Aetheria.Shared.Tests/EconomyChecksTests.cs +++ b/tests/Aetheria.Shared.Tests/EconomyChecksTests.cs @@ -220,7 +220,7 @@ public sealed class EconomyChecksTests public void ProductiveRefusesFactorsBelowOne() { using var f = new EconomyFixture(); - Assert.Throws(() => EconomyChecks.Productive(f.Cache, new EconomyLoad { InputFactor = 0.5 })); + Assert.Contains("at least 1", Assert.Throws(() => EconomyChecks.Productive(f.Cache, new EconomyLoad { InputFactor = 0.5 })).Message); Assert.Throws(() => EconomyChecks.Productive(f.Cache, new EconomyLoad { WorkforceFactor = 0.5 })); Assert.Throws(() => EconomyChecks.Productive(f.Cache, new EconomyLoad { UpkeepFactor = double.NaN })); Assert.Empty(EconomyChecks.Productive(f.Cache, new EconomyLoad { InputFactor = 1, WorkforceFactor = 1, UpkeepFactor = 1 }));