Aetheria/tests/Aetheria.Shared.Tests/ShippedWeaponOperabilityTests.cs
Meta Vens 675e22d735 Operability test: assert performance above the online threshold, not above zero
Entity.UpdatePerformance sets ThermalOnline only when performance exceeds EntitySettings.ShutdownPerformance.
A weapon at 0.006 performance at a hull's starting temperature passed the old "> 0" test but could never fire.
The threshold is read from production (new EntitySettings().ShutdownPerformance).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 16:33:31 +02:00

26 lines
1.2 KiB
C#

using System.Linq;
using Xunit;
// A weapon is thermally online only while its performance exceeds the shutdown threshold (Entity.UpdatePerformance
// compares against EntitySettings.ShutdownPerformance), and wear runs at full rate below it. Hull cells
// start at Entity.StartingCellTemperature, so every shipped weapon must perform there, or a ship fitted with it
// can never fire it. The catalog comes from the shipped GameData/Aetheria.cc and the temperature from the
// constant Entity builds its cells with, so a unit slip in authoring (celsius for kelvin) fails here.
public sealed class ShippedWeaponOperabilityTests
{
[Fact]
public void EveryShippedWeaponPerformsAtAHullsStartingTemperature()
{
using var cache = RestoredHullsTests.OpenCatalog();
var weapons = cache.GetAll<GearData>().OfType<WeaponItemData>().ToArray();
Assert.NotEmpty(weapons);
var threshold = new EntitySettings().ShutdownPerformance;
Assert.True(threshold > 0f);
var dead = weapons.Where(weapon => weapon.Performance(Entity.StartingCellTemperature) <= threshold)
.Select(weapon => $"{weapon.Name} ({weapon.MinimumTemperature}..{weapon.MaximumTemperature} K)").ToArray();
Assert.Empty(dead);
}
}