Aetheria/tests/Aetheria.Shared.Tests
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Meta Vens 8bd25f6faa Cut 12.2 Soul fix batch: half-open clamp, split assembly, real rolls
F1 (correctness): LateralDraw clamped the drawn lateral to the closed
[Lo, Hi], not the spec's half-open [Lo, Hi). Soul enumerated all 2^24
NextFloat outputs against TurningArmourIntoTheShotTakesItOnTheArmour's own
geometry and found 3 that draw exactly Hi, which Lane's own half-open filter
then admits no cell for -- a hit that passed its roll landing nowhere (R3).
Fixed the clamp; Lane's silent int2.zero fallback on an empty lane is now a
thrown InvalidOperationException, since an empty lane is provably impossible
after the fix. Committed Soul's edge probe as
LateralDrawIsHalfOpenAtTheShadowsTopEdge.

F6/F8: HitProbability, Inspect and Fire each assembled bearing -> Silhouette
-> PSpread (or recomputed range) in their own copy; a shooter-frame bearing
bug in HitProbability's copy survived while the identical bug in Inspect's
copy was caught. Collapsed into one Forecast function and one PFire(out range)
overload; both callers, and Fire, read the one computation.

F2: FireControlCut12Tests' zone names carried a Guid, breaking every other
cut's fixed-seed convention (FireControlCut6Tests.cs:62-63) and reseeding the
die every run -- the actual source of the flake in
TurningArmourIntoTheShotTakesItOnTheArmour. Fixed to a fixed zone name.

F3/F4/F5/F7: added a two-prong hull fixture (LateralDraw's walk past the first
interval, and a wrong-sigma placement, were unreachable when every fixture
projects to one interval), a real-roll empirical test for CommitProbability
(the old one called the pure function twice and compared it to itself),
enough Penetration in TurningAfterCommitChangesNothing for ApplyHit to
actually read the bearing, and a 2x2 item fixture for ResolveAimPoint's
average (every "Marker" elsewhere is 1x1, so sum/length and sum*length agree).

F9: Lane's own comment claimed no allocation while its sort used
Comparer<T>.Create over a closure; LaneCell now carries its own precomputed
projection and Lane sorts with a stateless singleton comparer. Corrected an
overclaiming comment in FireAuthorityTests (SigmaFloor makes the aimed-lane
draw ~68% per shot, not deterministic; the fixture's fixed zone name is what
actually makes it reproduce).

Cost: Silhouette takes an optional caller-rented Interval[] buffer; the
forecast path (HitProbability/Inspect, via Forecast) rents from
ArrayPool<Interval>.Shared and returns it before returning, since neither
reads sil.Intervals after the call. Commit/CommitProbability still get an
owned array, since LateralDraw needs it alive past the call. Measured on
LonginusX (66 cells, Release): unaimed 672 B -> 184 B/call (1512-1637ns before,
1482-1560ns after); aimed 1160 B -> 672 B/call (2123-2140ns before,
2094-2162ns after) -- the remaining ~488B/call gap between aimed and unaimed
is ResolveAimPoint's own CellsOf allocation (a List<int2>+ToArray per call),
not in this batch's scope.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 23:08:19 +02:00
..
Aetheria.Shared.Tests.csproj Pin AetheriaStores routing with tests; make PlayerSettings readable 2026-09-14 19:12:54 +02:00
AetheriaStoresTests.cs Resolve request/brownout conflict: evaluate power requests nominally 2026-09-19 06:58:57 +02:00
BrownoutTests.cs Resolve request/brownout conflict: evaluate power requests nominally 2026-09-19 06:58:57 +02:00
CapabilityEventsTests.cs Test that capability events route only to their own kind's subscribers 2026-09-17 14:37:07 +02:00
ConditionRatioTests.cs Cut 8: pin ConditionRatio -- perfect/dead/durability/heat/power/force-unchanged 2026-09-19 04:41:43 +02:00
FireAuthorityTests.cs Cut 12.2 Soul fix batch: half-open clamp, split assembly, real rolls 2026-09-24 23:08:19 +02:00
FireControlCut4Tests.cs Cut 11 second round: one owner for PBase, and tests for what the 51 survivors showed 2026-09-22 16:39:52 +02:00
FireControlCut5Tests.cs Cut 6d: the dart-throw kernel replaces the coin-flip landing rule 2026-09-19 21:37:39 +02:00
FireControlCut6cTests.cs Fire control Cut 6c.1/6c.2: Resolution becomes reciprocal, targeting degrades instead of throwing 2026-09-19 18:31:46 +02:00
FireControlCut6dTests.cs Cut 12.2: where a hit lands is priced and drawn from one silhouette 2026-09-24 20:40:50 +02:00
FireControlCut6Tests.cs Cut 6d: the dart-throw kernel replaces the coin-flip landing rule 2026-09-19 21:37:39 +02:00
FireControlCut7Tests.cs Cut 12.2: where a hit lands is priced and drawn from one silhouette 2026-09-24 20:40:50 +02:00
FireControlCut8Tests.cs Cut 8: a removed entity is a dead entity, and re-anchor the stranded mutations 2026-09-22 00:50:57 +02:00
FireControlCut9Tests.cs Cut 12.2 Soul fix batch: half-open clamp, split assembly, real rolls 2026-09-24 23:08:19 +02:00
FireControlCut11Tests.cs Correct the Splash handedness claim: an undefended mutant, not a shipped bug 2026-09-22 18:37:12 +02:00
FireControlCut12Tests.cs Cut 12.2 Soul fix batch: half-open clamp, split assembly, real rolls 2026-09-24 23:08:19 +02:00
FireControlTests.cs Fire control Cut 3: hit authority moves to FireControl 2026-09-19 14:07:07 +02:00
HeatResponseTests.cs Cut 1: close S5/S6's validation gaps, pin S7's surviving mutants 2026-09-18 18:42:10 +02:00
IffAndCombatTests.cs Test the IFF/grudge/detection rules and the weapon stance gate 2026-09-17 14:01:31 +02:00
InputCapacitorTests.cs Fire control Cut 3: hit authority moves to FireControl 2026-09-19 14:07:07 +02:00
LoadoutTests.cs Pin the targeting subsystem, reveal rule and Q4's required-equipment rule 2026-09-19 13:03:12 +02:00
PlayerSettingsSensitivityTests.cs Move mouse-look sensitivity into the PlayerSettings CultCache global 2026-09-17 17:22:09 +02:00
PowerBusTests.cs F2: gate the bus's reactors and consumers on Active, not Online 2026-09-19 05:06:31 +02:00
PowerCurveTests.cs Resolve request/brownout conflict: evaluate power requests nominally 2026-09-19 06:58:57 +02:00
PowerTierTests.cs F3: an empty tier is not a satisfied tier, and sub-epsilon demand pays its way 2026-09-19 05:15:30 +02:00
RoleAuthoringTests.cs Cut 7: refuse a stat naming a role its design lacks 2026-09-19 05:01:17 +02:00
RunSaveTests.cs Delete the persisted-behaviors feature per operator ruling 2026-09-17 05:44:37 +02:00
ShieldReserveTests.cs F4/F5: shield restore survives inactivity, and CanTakeHit stops mutating 2026-09-19 05:32:29 +02:00
StatResolverTests.cs Pin Gate 1, Gate 2 and F8's mutant fix with tests and mutations 2026-09-18 20:42:05 +02:00
stryker-config.json Cut 11 map: mutation testing moves to Stryker, and the survivors it found 2026-09-22 15:59:06 +02:00
TargetingSystemTests.cs Cut 6d: the dart-throw kernel replaces the coin-flip landing rule 2026-09-19 21:37:39 +02:00