test: replace campaign labels with behavior names
This commit is contained in:
parent
e6fab96f12
commit
9c6b143a03
30 changed files with 135 additions and 97 deletions
File diff suppressed because one or more lines are too long
|
|
@ -136,7 +136,7 @@ identifiable in the lane report.
|
|||
| T-013 controller self-comparison | high-confidence cleanup batch A | Capture the first controller next to the first body and compare every retry with that reference. |
|
||||
| T-014 seven load-sensitive tests | six mechanisms repaired in batch F; one product defect classified | Virtual/wall-clock mixing, tiered-JIT allocation noise, a live controller clock, and a ThreadPool-start timing oracle were removed without weakening behavioral contracts. `DatSoundCache` #321 is a real in-flight-entry race and now runs as `Status=KnownFailure` pending a product fix. |
|
||||
| T-015 four non-prerequisite skips | resolved in batches A/B | PVS scaffold deleted with rationale preserved; redundant chat/radar generators deleted in favor of the comprehensive Manual lane; tower oracle is `Status=KnownFailure`. |
|
||||
| T-016 historical test taxonomy | open | Rename/re-home only after each test's durable owner and oracle are established. |
|
||||
| T-016 historical test taxonomy | first descriptive-identity batch active in batch J | Remove opaque AP/R/J/K/Slice codes from current test/type names while preserving provenance in comments and ledgers. The 47 `Issue###` files remain an explicit user-decision set because their IDs still connect tests to retail evidence. |
|
||||
| T-017 Avalonia ownership | reopened and closed in batch D | The full gate exposed the same compositor ownership class between six newer `MainWindowViewTests` facts. Their six named assertion phases now run in one owned Avalonia application session; 25 fresh-process stress iterations and the complete gate pass. |
|
||||
| T-018 stderr observer race | resolved in R2 | Live reader shares writes/deletes; 25 focused repetitions plus the complete gate. |
|
||||
| T-019 remaining explicit waits | classified in batch H; nine fixed-delay negative oracles need cleanup | Five of the 38 methods are deterministic cancellation stubs, not wall-clock tests. Preserve four intentional real-time contracts and bounded integration polling; replace the nine tests that infer “still blocked” from a fixed delay with observable synchronization state. |
|
||||
|
|
@ -465,7 +465,7 @@ of three dispositions:
|
|||
|
||||
| Disposition | Methods | Owning test files |
|
||||
|---|---:|---|
|
||||
| Campaign-era implementation-shape freeze; replace in stages | 46 | `ContentEffectsAudioCompositionTests`, `FrameRootCompositionTests`, `HostInputCameraCompositionTests`, `InteractionRetainedUiCompositionTests`, `LivePresentationCompositionTests`, `SessionPlayerCompositionTests`, `WorldRenderCompositionTests`, `GameWindowLiveSessionOwnershipTests`, `GameWindowRenderLeafCompositionTests`, `GameWindowSlice8BoundaryTests`, `ResourceCleanupGroupTests`, `RetailPViewPassExecutorTests`, `WorldRenderFrameBuilderTests`, `WorldSceneRendererTests`, `LandblockBuildOriginTests`, `LandblockPhysicsPublisherTests`, `LandblockRenderPublisherTests`, `GameWindowLiveEntityCompositionTests`, `UpdateFrameOrchestratorTests` |
|
||||
| Campaign-era implementation-shape freeze; replace in stages | 46 | `ContentEffectsAudioCompositionTests`, `FrameRootCompositionTests`, `HostInputCameraCompositionTests`, `InteractionRetainedUiCompositionTests`, `LivePresentationCompositionTests`, `SessionPlayerCompositionTests`, `WorldRenderCompositionTests`, `GameWindowLiveSessionOwnershipTests`, `GameWindowRenderLeafCompositionTests`, `GameWindowHostBoundaryTests`, `ResourceCleanupGroupTests`, `RetailPViewPassExecutorTests`, `WorldRenderFrameBuilderTests`, `WorldSceneRendererTests`, `LandblockBuildOriginTests`, `LandblockPhysicsPublisherTests`, `LandblockRenderPublisherTests`, `GameWindowLiveEntityCompositionTests`, `UpdateFrameOrchestratorTests` |
|
||||
| Whole-tree architecture policy; retain, then make syntax/metadata-aware | 12 | `LinuxPlatformBoundaryTests`, `RenderSceneArchitectureTests`, `RuntimePhysicsOwnershipTests`, `RuntimeEntityOwnershipTests` |
|
||||
| Source/project/artifact text is the actual cross-artifact contract; retain | 5 | `ParticleBindlessInstanceTests`, `PerformanceToolsTests`, `LauncherProjectBoundaryTests` |
|
||||
|
||||
|
|
@ -496,3 +496,45 @@ text is appropriate there.
|
|||
No source-freeze fact is removed in this classification batch. The 46 staged
|
||||
facts are an ambiguous architecture decision and will be presented for user
|
||||
approval in behavior-owner groups rather than deleted from a numeric heuristic.
|
||||
|
||||
## Batch J descriptive test identities
|
||||
|
||||
The first T-016 naming batch changes no oracle or production behavior. It
|
||||
renames eight opaque type/file identities and fifteen test methods whose AP,
|
||||
R, J, K, C3c, or Slice labels described the implementation campaign rather
|
||||
than the contract a maintainer needs to find:
|
||||
|
||||
| Former identity family | Durable identity |
|
||||
|---|---|
|
||||
| `GameWindowSlice8BoundaryTests` | `GameWindowHostBoundaryTests` |
|
||||
| `Ap10WaterSemanticsTests`, `Ap71EntryRestrictionGateTests`, `Ap155StaticSpherePopulationMeasurementTests`, `Ap157SortingSphereFloodMeasurementTests` | `WaterSemanticsTests`, `EntryRestrictionGateTests`, `StaticSpherePopulationMeasurementTests`, `SortingSphereFloodMeasurementTests` |
|
||||
| `ConnectedR6SoakContractTests` | `ConnectedWorldSoakRouteContractTests` |
|
||||
| `C3cR1F3DriftModelSourcePinTests` | `CreateAuthorityDriftModelSourcePinTests` |
|
||||
| `R5Host` / `R5ManagerHarness.cs` | `PhysicsObjHostStub` / `PhysicsManagerHarness.cs` |
|
||||
| J4/J5 Runtime methods | gameplay-view, gameplay-command, checkpoint, simulation, and ownership-ledger names |
|
||||
| K4/Slice-L/K1c/J9 methods | multi-session profile, unsupported-platform explanation, legacy keymap difference, and stop-speed behavior names |
|
||||
| AP-135/AP-195 method names | placement-bookkeeping and authored-LED-sprite names |
|
||||
|
||||
Provenance is not discarded. AP-157 remains the row key in the retail
|
||||
divergence register, the connected route keeps its established artifact name,
|
||||
and historical audit/plan documents retain the old identifiers. Current
|
||||
cross-references and test comments point to the new descriptive names. The
|
||||
source-freeze class summary now states its R3 replacement status instead of
|
||||
claiming to be a temporary Slice 8 checkpoint.
|
||||
|
||||
This batch intentionally does not rename the 47 `Issue###` files. Their
|
||||
descriptive suffixes are often useful, and the issue number can be the shortest
|
||||
path to a retail trace or reproduction. Re-homing those contracts by component
|
||||
while retaining `Issue` provenance is an architecture/taxonomy choice for user
|
||||
approval, not a mechanical cleanup.
|
||||
|
||||
Verification before the complete gate:
|
||||
|
||||
- all 44 maintained projects build in Release with 0 warnings and 0 errors;
|
||||
- 102 focused App cases, 203 Core cases, 17 Runtime cases, 5 Headless cases,
|
||||
1 Launcher.Core case, and 10 UI.Abstractions cases pass; and
|
||||
- the renamed installed-DAT population measurement passes 1/1 against the
|
||||
local retail DAT.
|
||||
|
||||
The no-retry complete hermetic Release gate passed 14,391/14,391 with zero
|
||||
skips or failures across all 12 test assemblies.
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ internal sealed class FramebufferResizeController
|
|||
// the only trace of whether the native event fired at all). Lives here
|
||||
// rather than in GameWindow.OnFramebufferResize because the window
|
||||
// callback is contractually a one-line typed-owner handoff
|
||||
// (GameWindowSlice8BoundaryTests.FramebufferResize_IsOneTypedOwnerHandoff).
|
||||
// (GameWindowHostBoundaryTests.FramebufferResize_IsOneTypedOwnerHandoff).
|
||||
Console.WriteLine($"window: framebuffer resize event {width}x{height}");
|
||||
|
||||
// Frozen order: GL viewport, shared aspect publication, camera, then
|
||||
|
|
|
|||
|
|
@ -651,7 +651,7 @@ public sealed class RuntimeCharacterOptionsState
|
|||
/// <c>480.0</c> (wire research §3.3): the batched module flushes 480
|
||||
/// seconds after it FIRST went dirty, not after the last change. A
|
||||
/// property (not a field) so this type keeps zero static mutable state
|
||||
/// — see <c>GameRuntimeContractTests.J4GameplayOwnersHaveNoStaticMutableSessionState</c>.
|
||||
/// — see <c>GameRuntimeContractTests.GameplayOwnersHaveNoStaticMutableSessionState</c>.
|
||||
/// </summary>
|
||||
public static TimeSpan AutoSaveDelay => TimeSpan.FromSeconds(480);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
namespace AcDream.App.Tests.Diagnostics;
|
||||
|
||||
public sealed class ConnectedR6SoakContractTests
|
||||
public sealed class ConnectedWorldSoakRouteContractTests
|
||||
{
|
||||
private static readonly string[] ExpectedCheckpointNames =
|
||||
[
|
||||
|
|
@ -310,7 +310,7 @@ public sealed class LiveEntityNetworkOnPositionCollapseMatrixTests
|
|||
[Theory]
|
||||
[InlineData(PlayerGuid)]
|
||||
[InlineData(CreatureGuid)]
|
||||
public void WireAirborneNullClassified_BothGuids_WritesOnlyAP135Bookkeeping(
|
||||
public void WireAirborneNullClassified_BothGuids_WritesOnlyPlacementBookkeeping(
|
||||
uint guid)
|
||||
{
|
||||
using var fixture = new Fixture(guid, nullClassification: true);
|
||||
|
|
@ -334,8 +334,7 @@ public sealed class LiveEntityNetworkOnPositionCollapseMatrixTests
|
|||
// lazily created only on a genuine arm).
|
||||
Assert.Null(host.PositionManager.Constraint);
|
||||
|
||||
// Positive half (round-2 B1's lesson): AP-135's two writes DID
|
||||
// happen.
|
||||
// Positive half: the placement bookkeeping writes did happen.
|
||||
Assert.Equal(SourceCell, fixture.Remote.CellId);
|
||||
Assert.Equal(wirePos, fixture.Remote.LastServerPos);
|
||||
Assert.NotEqual(0d, fixture.Remote.LastServerPosTime);
|
||||
|
|
@ -346,7 +345,7 @@ public sealed class LiveEntityNetworkOnPositionCollapseMatrixTests
|
|||
[Theory]
|
||||
[InlineData(PlayerGuid)]
|
||||
[InlineData(CreatureGuid)]
|
||||
public void AirborneNoOperation_BothGuids_WritesOnlyAP135BookkeepingNoArm(
|
||||
public void AirborneNoOperation_BothGuids_WritesOnlyPlacementBookkeepingNoArm(
|
||||
uint guid)
|
||||
{
|
||||
using var fixture = new Fixture(guid);
|
||||
|
|
@ -933,7 +932,7 @@ public sealed class LiveEntityNetworkOnPositionCollapseMatrixTests
|
|||
// IsConstrained rather than nulling the manager back out (it was
|
||||
// lazily CREATED by the ConstrainTo test-setup call above, and
|
||||
// creation is one-way) — this is the exact discriminator
|
||||
// WireAirborneNullClassified_BothGuids_WritesOnlyAP135Bookkeeping's
|
||||
// WireAirborneNullClassified_BothGuids_WritesOnlyPlacementBookkeeping's
|
||||
// own comment names ("Constraint is lazily created only on a
|
||||
// genuine arm").
|
||||
Assert.NotNull(host.PositionManager.Constraint);
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ namespace AcDream.App.Tests.Rendering;
|
|||
/// of an exception that escaped <c>Run()</c>'s Silk.NET frame loop and was
|
||||
/// about to crash the process via the CLR's unhandled-exception path.
|
||||
/// <c>GameWindow</c> cannot be constructed without a live GPU/window (see
|
||||
/// the established pattern in <c>GameWindowSlice8BoundaryTests</c>), so
|
||||
/// the established pattern in <c>GameWindowHostBoundaryTests</c>), so
|
||||
/// this pins the fix as a source-shape test exactly like that file does
|
||||
/// for the surrounding shutdown machinery.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,11 @@
|
|||
namespace AcDream.App.Tests.Rendering;
|
||||
|
||||
/// <summary>
|
||||
/// Temporary source-shape freeze for the Slice 8 cutover. Each later checkpoint
|
||||
/// replaces the corresponding assertion with functional tests on the extracted
|
||||
/// owner; this file prevents a mechanical move from silently reordering host
|
||||
/// behavior before that owner exists.
|
||||
/// Source-level architecture guards for the narrow graphical-host composition
|
||||
/// boundary. R3 tracks these literal source-shape checks for staged replacement
|
||||
/// with semantic owner and lifecycle contracts.
|
||||
/// </summary>
|
||||
public sealed class GameWindowSlice8BoundaryTests
|
||||
public sealed class GameWindowHostBoundaryTests
|
||||
{
|
||||
[Fact]
|
||||
public void Run_PreservesNativeAttributeAndCallbackOrder()
|
||||
|
|
@ -18,9 +17,8 @@ public sealed class GameWindowSlice8BoundaryTests
|
|||
"RuntimeSettingsSnapshot startup = _runtimeSettings.Startup",
|
||||
"_displayFramePacing.InitializeStartup(startup.Display.VSync)",
|
||||
"VSync = startupPacing.UseVSync",
|
||||
// Campaign V slice V11: the raw-GL "Samples = ..." window option
|
||||
// is gone — Vulkan takes MSAA as an RHI attachment property, not
|
||||
// a window attribute. _startupQuality carries it forward instead.
|
||||
// Vulkan takes MSAA as an RHI attachment property rather than a
|
||||
// window attribute. _startupQuality carries it forward instead.
|
||||
"_startupQuality = startup.Quality;",
|
||||
"Window.Create(options)",
|
||||
"_displayFramePacing.BindSurface(",
|
||||
|
|
@ -83,7 +83,7 @@ public sealed class LiveEntityCreateSupersessionRecoveryTests
|
|||
// covered.
|
||||
// C3c-R1 F3: honest MODEL of the executor drain's advance
|
||||
// (ApplyWeenieDescriptionAction — the sole production site,
|
||||
// source-pinned by C3cR1F3DriftModelSourcePinTests); a
|
||||
// source-pinned by CreateAuthorityDriftModelSourcePinTests); a
|
||||
// nested production OnCreate can no longer reach it —
|
||||
// post-residence registration is description-only
|
||||
// (RuntimeEntityObjectLifetime :660-665,
|
||||
|
|
|
|||
|
|
@ -463,7 +463,7 @@ public sealed class CurrentGameRuntimeAdapterTests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void AdapterBorrowsExactJ4ViewsAndCheckpointState()
|
||||
public void AdapterBorrowsExactGameplayViewsAndCheckpointState()
|
||||
{
|
||||
using var harness = new Harness();
|
||||
harness.Character.Options.Replace(0x04000000u, 0x00948700u);
|
||||
|
|
@ -502,7 +502,7 @@ public sealed class CurrentGameRuntimeAdapterTests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void J4StateCommandsAreGenerationGatedAndReachCurrentTransport()
|
||||
public void GameplayStateCommandsAreGenerationGatedAndReachCurrentTransport()
|
||||
{
|
||||
using var harness = new Harness();
|
||||
var trace = new RuntimeTraceRecorder();
|
||||
|
|
@ -668,7 +668,7 @@ public sealed class CurrentGameRuntimeAdapterTests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void GraphicalAndNoWindowJ4CommandsProduceIdenticalCanonicalState()
|
||||
public void GraphicalAndNoWindowGameplayCommandsProduceIdenticalCanonicalState()
|
||||
{
|
||||
using var directEntities = new RuntimeEntityObjectLifetime();
|
||||
using var directInventory =
|
||||
|
|
|
|||
|
|
@ -276,9 +276,9 @@ public sealed class ChatOptionsPageControllerTests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void Bind_FilterBlocks_ResolveTheAP195LedSprites()
|
||||
public void Bind_FilterBlocks_ResolveTheAuthoredLedSprites()
|
||||
{
|
||||
// AP-195 end-to-end: the regenerated fixture now carries dat properties
|
||||
// The regenerated fixture carries DAT properties
|
||||
// 0x10000082/0x10000083 on template consumer 0x10000520
|
||||
// (0x06004D17/0x06004D19), and DatWidgetFactory threads them into the
|
||||
// constructed UiCheckboxBitfield64 — every one of the five blocks shares
|
||||
|
|
|
|||
|
|
@ -3,8 +3,7 @@ using System.Text.RegularExpressions;
|
|||
namespace AcDream.App.Tests.World;
|
||||
|
||||
/// <summary>
|
||||
/// C3c-R1 F3 (coordinator resolution, 2026-08-02): the create-authority
|
||||
/// drift probes in the expectation-item 6/8 tests
|
||||
/// The create-authority drift probes in the expectation-item 6/8 tests
|
||||
/// (LiveEntityHydrationControllerTests + LiveEntityCreateSupersessionRecoveryTests)
|
||||
/// hand-call <c>record.Canonical.AdvanceCreateAuthority()</c> as an HONEST
|
||||
/// MODEL of the executor drain's advance — the SOLE remaining production
|
||||
|
|
@ -19,7 +18,7 @@ namespace AcDream.App.Tests.World;
|
|||
/// STALE if the production site ever moves or loses the advance — the
|
||||
/// item 6/8 probes must be re-derived from wherever it goes.
|
||||
/// </summary>
|
||||
public sealed class C3cR1F3DriftModelSourcePinTests
|
||||
public sealed class CreateAuthorityDriftModelSourcePinTests
|
||||
{
|
||||
[Fact]
|
||||
public void HandCalledDriftProbe_StillModelsTheExecutorDrainAdvance()
|
||||
|
|
@ -1371,7 +1371,7 @@ public sealed class LiveEntityHydrationControllerTests
|
|||
// honest MODEL of the executor drain's advance
|
||||
// (RuntimeInitialCreateContinuationExecutor
|
||||
// .ApplyWeenieDescriptionAction — the sole production site,
|
||||
// source-pinned by C3cR1F3DriftModelSourcePinTests). A nested
|
||||
// source-pinned by CreateAuthorityDriftModelSourcePinTests). A nested
|
||||
// production OnCreate can no longer reach it here:
|
||||
// post-residence ExistingGeneration registration is
|
||||
// description-only (RuntimeEntityObjectLifetime gates the
|
||||
|
|
@ -1509,7 +1509,7 @@ public sealed class LiveEntityHydrationControllerTests
|
|||
// honest MODEL of the executor drain's advance
|
||||
// (RuntimeInitialCreateContinuationExecutor
|
||||
// .ApplyWeenieDescriptionAction — the sole production site,
|
||||
// source-pinned by C3cR1F3DriftModelSourcePinTests). A nested
|
||||
// source-pinned by CreateAuthorityDriftModelSourcePinTests). A nested
|
||||
// production OnCreate can no longer reach it here:
|
||||
// post-residence ExistingGeneration registration is
|
||||
// description-only (RuntimeEntityObjectLifetime gates the
|
||||
|
|
@ -1864,7 +1864,7 @@ public sealed class LiveEntityHydrationControllerTests
|
|||
// revalidation guard stays covered.
|
||||
// C3c-R1 F3: honest MODEL of the executor drain's advance
|
||||
// (ApplyWeenieDescriptionAction — the sole production site,
|
||||
// source-pinned by C3cR1F3DriftModelSourcePinTests); a
|
||||
// source-pinned by CreateAuthorityDriftModelSourcePinTests); a
|
||||
// nested production OnCreate can no longer reach it —
|
||||
// post-residence registration is description-only
|
||||
// (RuntimeEntityObjectLifetime :660-665,
|
||||
|
|
@ -1983,7 +1983,7 @@ public sealed class LiveEntityHydrationControllerTests
|
|||
// WeenieDescription stage; model that advance directly.
|
||||
// C3c-R1 F3: honest MODEL of the executor drain's advance
|
||||
// (ApplyWeenieDescriptionAction — the sole production site,
|
||||
// source-pinned by C3cR1F3DriftModelSourcePinTests); a
|
||||
// source-pinned by CreateAuthorityDriftModelSourcePinTests); a
|
||||
// nested production OnCreate can no longer reach it —
|
||||
// post-residence registration is description-only
|
||||
// (RuntimeEntityObjectLifetime :660-665,
|
||||
|
|
@ -2019,7 +2019,7 @@ public sealed class LiveEntityHydrationControllerTests
|
|||
// (AdvanceCreateAuthority), not at registration; model it directly.
|
||||
// C3c-R1 F3: honest MODEL of the executor drain's advance
|
||||
// (ApplyWeenieDescriptionAction — the sole production site,
|
||||
// source-pinned by C3cR1F3DriftModelSourcePinTests); a nested
|
||||
// source-pinned by CreateAuthorityDriftModelSourcePinTests); a nested
|
||||
// production OnCreate can no longer reach it — post-residence
|
||||
// registration is description-only (RuntimeEntityObjectLifetime
|
||||
// :660-665, !beginInitialResidence gate) and ConsumeExecuted
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ namespace AcDream.Content.Tests;
|
|||
/// already counted fall into exactly that trap.
|
||||
/// </summary>
|
||||
[Trait("Lane", "InstalledDat")]
|
||||
public sealed class Ap155StaticSpherePopulationMeasurementTests
|
||||
public sealed class StaticSpherePopulationMeasurementTests
|
||||
{
|
||||
[Fact]
|
||||
public void InstalledSetups_SphereOnlyStaticPopulation_Measured()
|
||||
|
|
@ -41,7 +41,7 @@ namespace AcDream.Core.Tests.Physics;
|
|||
/// suite's "resolved" scenarios are what prevents that regression.
|
||||
/// </para>
|
||||
/// </summary>
|
||||
public sealed class Ap71EntryRestrictionGateTests
|
||||
public sealed class EntryRestrictionGateTests
|
||||
{
|
||||
private const uint RestrictionObjGuid = 0x80001234u;
|
||||
private const uint MoverGuid = 0x50000001u;
|
||||
|
|
@ -12,10 +12,10 @@ namespace AcDream.Core.Tests.Physics.Motion;
|
|||
/// </summary>
|
||||
public sealed class ConstraintManagerTests
|
||||
{
|
||||
private static (R5Host host, ConstraintManager cm) Setup()
|
||||
private static (PhysicsObjHostStub host, ConstraintManager cm) Setup()
|
||||
{
|
||||
var world = new Dictionary<uint, R5Host>();
|
||||
var host = new R5Host(10u, world);
|
||||
var world = new Dictionary<uint, PhysicsObjHostStub>();
|
||||
var host = new PhysicsObjHostStub(10u, world);
|
||||
return (host, new ConstraintManager(host));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,11 +20,11 @@ namespace AcDream.Core.Tests.Physics.Motion;
|
|||
/// <c>receive_target_update</c> seams forward to the owned
|
||||
/// <see cref="TargetManager"/> exactly as retail's <c>CPhysicsObj</c> does.</para>
|
||||
/// </summary>
|
||||
internal sealed class R5Host : IPhysicsObjHost
|
||||
internal sealed class PhysicsObjHostStub : IPhysicsObjHost
|
||||
{
|
||||
public readonly Dictionary<uint, R5Host> World;
|
||||
public readonly Dictionary<uint, PhysicsObjHostStub> World;
|
||||
|
||||
public R5Host(uint id, Dictionary<uint, R5Host> world)
|
||||
public PhysicsObjHostStub(uint id, Dictionary<uint, PhysicsObjHostStub> world)
|
||||
{
|
||||
Id = id;
|
||||
World = world;
|
||||
|
|
@ -14,11 +14,11 @@ namespace AcDream.Core.Tests.Physics.Motion;
|
|||
/// </summary>
|
||||
public sealed class PositionManagerFacadeTests
|
||||
{
|
||||
private static (R5Host self, R5Host target, PositionManager pm) Setup()
|
||||
private static (PhysicsObjHostStub self, PhysicsObjHostStub target, PositionManager pm) Setup()
|
||||
{
|
||||
var world = new Dictionary<uint, R5Host>();
|
||||
var self = new R5Host(10u, world);
|
||||
var target = new R5Host(20u, world);
|
||||
var world = new Dictionary<uint, PhysicsObjHostStub>();
|
||||
var self = new PhysicsObjHostStub(10u, world);
|
||||
var target = new PhysicsObjHostStub(20u, world);
|
||||
return (self, target, new PositionManager(self));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,18 +13,18 @@ namespace AcDream.Core.Tests.Physics.Motion;
|
|||
/// </summary>
|
||||
public sealed class StickyManagerTests
|
||||
{
|
||||
private static (R5Host self, R5Host target, StickyManager sticky) Setup(
|
||||
private static (PhysicsObjHostStub self, PhysicsObjHostStub target, StickyManager sticky) Setup(
|
||||
uint targetId = 20u, float targetRadius = 0.5f)
|
||||
{
|
||||
var world = new Dictionary<uint, R5Host>();
|
||||
var self = new R5Host(10u, world);
|
||||
var target = new R5Host(targetId, world);
|
||||
var world = new Dictionary<uint, PhysicsObjHostStub>();
|
||||
var self = new PhysicsObjHostStub(10u, world);
|
||||
var target = new PhysicsObjHostStub(targetId, world);
|
||||
var sticky = new StickyManager(self);
|
||||
return (self, target, sticky);
|
||||
}
|
||||
|
||||
private static StickyManager StuckAndInitialized(
|
||||
R5Host self, R5Host target, Vector3 targetOrigin, float targetRadius = 0.5f)
|
||||
PhysicsObjHostStub self, PhysicsObjHostStub target, Vector3 targetOrigin, float targetRadius = 0.5f)
|
||||
{
|
||||
var sticky = new StickyManager(self);
|
||||
sticky.StickTo(target.Id, targetRadius, targetHeight: 1.0f);
|
||||
|
|
@ -130,10 +130,10 @@ public sealed class StickyManagerTests
|
|||
[Fact]
|
||||
public void ReStick_TearsDownPreviousBeforeSettingNew()
|
||||
{
|
||||
var world = new Dictionary<uint, R5Host>();
|
||||
var self = new R5Host(10u, world);
|
||||
var a = new R5Host(20u, world);
|
||||
var b = new R5Host(21u, world);
|
||||
var world = new Dictionary<uint, PhysicsObjHostStub>();
|
||||
var self = new PhysicsObjHostStub(10u, world);
|
||||
var a = new PhysicsObjHostStub(20u, world);
|
||||
var b = new PhysicsObjHostStub(21u, world);
|
||||
var sticky = new StickyManager(self);
|
||||
|
||||
sticky.StickTo(a.Id, 0.5f, 1.0f);
|
||||
|
|
@ -159,9 +159,9 @@ public sealed class StickyManagerTests
|
|||
[Fact]
|
||||
public void AdjustOffset_SteersTowardTarget_ClampedToStep()
|
||||
{
|
||||
var world = new Dictionary<uint, R5Host>();
|
||||
var self = new R5Host(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
|
||||
var target = new R5Host(20u, world);
|
||||
var world = new Dictionary<uint, PhysicsObjHostStub>();
|
||||
var self = new PhysicsObjHostStub(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
|
||||
var target = new PhysicsObjHostStub(20u, world);
|
||||
var sticky = StuckAndInitialized(self, target, new Vector3(5f, 0f, 0f));
|
||||
|
||||
var frame = new MotionDeltaFrame();
|
||||
|
|
@ -178,9 +178,9 @@ public sealed class StickyManagerTests
|
|||
[Fact]
|
||||
public void AdjustOffset_TooClose_BacksOff_SignedDistance()
|
||||
{
|
||||
var world = new Dictionary<uint, R5Host>();
|
||||
var self = new R5Host(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
|
||||
var target = new R5Host(20u, world);
|
||||
var world = new Dictionary<uint, PhysicsObjHostStub>();
|
||||
var self = new PhysicsObjHostStub(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
|
||||
var target = new PhysicsObjHostStub(20u, world);
|
||||
// centerDist 0.9, cyl = 0.9-0.5-0.5 = -0.1, minus 0.3 → dist = -0.4.
|
||||
var sticky = StuckAndInitialized(self, target, new Vector3(0.9f, 0f, 0f));
|
||||
|
||||
|
|
@ -194,9 +194,9 @@ public sealed class StickyManagerTests
|
|||
[Fact]
|
||||
public void AdjustOffset_DeepOverlap_BacksOff_RateLimited()
|
||||
{
|
||||
var world = new Dictionary<uint, R5Host>();
|
||||
var self = new R5Host(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
|
||||
var target = new R5Host(20u, world);
|
||||
var world = new Dictionary<uint, PhysicsObjHostStub>();
|
||||
var self = new PhysicsObjHostStub(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
|
||||
var target = new PhysicsObjHostStub(20u, world);
|
||||
// centerDist 0.1 → cyl = 0.1-0.5-0.5 = -0.9, minus 0.3 → dist = -1.2
|
||||
// (overlap DEEPER than one tick's step).
|
||||
var sticky = StuckAndInitialized(self, target, new Vector3(0.1f, 0f, 0f));
|
||||
|
|
@ -214,9 +214,9 @@ public sealed class StickyManagerTests
|
|||
[Fact]
|
||||
public void AdjustOffset_UsesCachedPosition_WhenTargetUnresolvable()
|
||||
{
|
||||
var world = new Dictionary<uint, R5Host>();
|
||||
var self = new R5Host(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
|
||||
var target = new R5Host(20u, world);
|
||||
var world = new Dictionary<uint, PhysicsObjHostStub>();
|
||||
var self = new PhysicsObjHostStub(10u, world) { Radius = 0.5f, MinterpMaxSpeed = 1.0f };
|
||||
var target = new PhysicsObjHostStub(20u, world);
|
||||
var sticky = new StickyManager(self);
|
||||
target.Resolvable = false;
|
||||
sticky.StickTo(target.Id, 0.5f, 1.0f);
|
||||
|
|
@ -233,9 +233,9 @@ public sealed class StickyManagerTests
|
|||
[Fact]
|
||||
public void AdjustOffset_NoMinterp_UsesFallbackSpeed()
|
||||
{
|
||||
var world = new Dictionary<uint, R5Host>();
|
||||
var self = new R5Host(10u, world) { Radius = 0.5f, MinterpMaxSpeed = null };
|
||||
var target = new R5Host(20u, world);
|
||||
var world = new Dictionary<uint, PhysicsObjHostStub>();
|
||||
var self = new PhysicsObjHostStub(10u, world) { Radius = 0.5f, MinterpMaxSpeed = null };
|
||||
var target = new PhysicsObjHostStub(20u, world);
|
||||
var sticky = StuckAndInitialized(self, target, new Vector3(50f, 0f, 0f));
|
||||
|
||||
var frame = new MotionDeltaFrame();
|
||||
|
|
|
|||
|
|
@ -14,11 +14,11 @@ namespace AcDream.Core.Tests.Physics.Motion;
|
|||
/// </summary>
|
||||
public sealed class TargetManagerTests
|
||||
{
|
||||
private static (R5Host self, R5Host target, Dictionary<uint, R5Host> world) TwoHosts()
|
||||
private static (PhysicsObjHostStub self, PhysicsObjHostStub target, Dictionary<uint, PhysicsObjHostStub> world) TwoHosts()
|
||||
{
|
||||
var world = new Dictionary<uint, R5Host>();
|
||||
var self = new R5Host(10u, world);
|
||||
var target = new R5Host(20u, world);
|
||||
var world = new Dictionary<uint, PhysicsObjHostStub>();
|
||||
var self = new PhysicsObjHostStub(10u, world);
|
||||
var target = new PhysicsObjHostStub(20u, world);
|
||||
return (self, target, world);
|
||||
}
|
||||
|
||||
|
|
@ -122,7 +122,7 @@ public sealed class TargetManagerTests
|
|||
var (self, originalTarget, world) = TwoHosts();
|
||||
self.TargetManager.SetTarget(0, originalTarget.Id, 1.0f, 0.0);
|
||||
self.HandleUpdateTargetCalls.Clear();
|
||||
var replacement = new R5Host(originalTarget.Id, world);
|
||||
var replacement = new PhysicsObjHostStub(originalTarget.Id, world);
|
||||
var p = new Position(1u, new Vector3(99f, 0f, 0f), Quaternion.Identity);
|
||||
|
||||
self.ReceiveTargetUpdate(
|
||||
|
|
@ -143,7 +143,7 @@ public sealed class TargetManagerTests
|
|||
self.SetOrigin(Vector3.Zero);
|
||||
originalTarget.SetOrigin(new Vector3(5f, 0f, 0f));
|
||||
self.PositionManager.StickTo(originalTarget.Id, 0.5f, 1f);
|
||||
var replacement = new R5Host(originalTarget.Id, world);
|
||||
var replacement = new PhysicsObjHostStub(originalTarget.Id, world);
|
||||
replacement.SetOrigin(new Vector3(10f, 0f, 0f));
|
||||
originalTarget.SetOrigin(new Vector3(-5f, 0f, 0f));
|
||||
var delta = new MotionDeltaFrame();
|
||||
|
|
@ -260,7 +260,7 @@ public sealed class TargetManagerTests
|
|||
watcher.TargetManager.SetTarget(0, target.Id, 1.0f, 0.0);
|
||||
watcher.HandleUpdateTargetCalls.Clear();
|
||||
watcher.Resolvable = false;
|
||||
var replacement = new R5Host(watcher.Id, world);
|
||||
var replacement = new PhysicsObjHostStub(watcher.Id, world);
|
||||
|
||||
target.TargetManager.NotifyVoyeurOfEvent(TargetStatus.Teleported);
|
||||
|
||||
|
|
@ -273,10 +273,10 @@ public sealed class TargetManagerTests
|
|||
[Fact]
|
||||
public void NotifyVoyeurOfEvent_BroadcastsToAll_NoDistanceGate()
|
||||
{
|
||||
var world = new Dictionary<uint, R5Host>();
|
||||
var target = new R5Host(20u, world);
|
||||
var w1 = new R5Host(10u, world);
|
||||
var w2 = new R5Host(11u, world);
|
||||
var world = new Dictionary<uint, PhysicsObjHostStub>();
|
||||
var target = new PhysicsObjHostStub(20u, world);
|
||||
var w1 = new PhysicsObjHostStub(10u, world);
|
||||
var w2 = new PhysicsObjHostStub(11u, world);
|
||||
// both watch the target (each gets a target_info via SetTarget)
|
||||
w1.TargetManager.SetTarget(0, target.Id, 1.0f, 0.0);
|
||||
w2.TargetManager.SetTarget(0, target.Id, 1.0f, 0.0);
|
||||
|
|
|
|||
|
|
@ -463,7 +463,7 @@ public sealed class MotionInterpreterDoMotionFamilyTests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void StopCompletely_DoesNotTouchSidestepOrTurnSpeeds_J9()
|
||||
public void StopCompletely_DoesNotTouchSidestepOrTurnSpeeds()
|
||||
{
|
||||
// A9/J9: retail touches ONLY forward cmd/speed + sidestep/turn
|
||||
// COMMANDS — it does NOT write sidestep_speed or turn_speed. The
|
||||
|
|
|
|||
|
|
@ -705,8 +705,8 @@ public sealed class MotionInterpreterJumpFamilyTests
|
|||
[Fact]
|
||||
public void JumpIsAllowed_LeashArmedAndOverstrained_ReturnsGeneralMovementFailure()
|
||||
{
|
||||
var world = new System.Collections.Generic.Dictionary<uint, R5Host>();
|
||||
var host = new R5Host(10u, world);
|
||||
var world = new System.Collections.Generic.Dictionary<uint, PhysicsObjHostStub>();
|
||||
var host = new PhysicsObjHostStub(10u, world);
|
||||
const uint outdoorCell = 0x12340007u; // low16 < 0x0100 -> outdoor
|
||||
host.Position = new Position(outdoorCell, Vector3.Zero, Quaternion.Identity);
|
||||
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ namespace AcDream.Core.Tests.Physics;
|
|||
/// </para>
|
||||
/// </summary>
|
||||
[Trait("Lane", "InstalledDat")]
|
||||
public sealed class Ap157SortingSphereFloodMeasurementTests
|
||||
public sealed class SortingSphereFloodMeasurementTests
|
||||
{
|
||||
/// <summary>Arbitrary non-zero landblock id — only its prefix matters for
|
||||
/// seeding the outdoor flood; the entity is placed at the landblock's own
|
||||
|
|
@ -30,7 +30,7 @@ namespace AcDream.Core.Tests.Physics;
|
|||
/// </item>
|
||||
/// </list>
|
||||
/// </summary>
|
||||
public class Ap10WaterSemanticsTests
|
||||
public class WaterSemanticsTests
|
||||
{
|
||||
// ── §1: TerrainSurface.SampleWaterDepth golden values ──────────────────
|
||||
|
||||
|
|
@ -6,7 +6,7 @@ namespace AcDream.Headless.Tests;
|
|||
public sealed class HeadlessProcessResourceEnvelopeTests
|
||||
{
|
||||
[Fact]
|
||||
public void K4ProfileScalesOnlyPerSessionDimensions()
|
||||
public void MultiSessionProfileScalesOnlyPerSessionDimensions()
|
||||
{
|
||||
HeadlessProcessResourceCeilings ceilings =
|
||||
HeadlessProcessResourceCeilings.K4Linux;
|
||||
|
|
|
|||
|
|
@ -380,7 +380,7 @@ public sealed class LauncherOrchestratorTests : IDisposable
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public async Task LinuxRejectsBothGraphicalModesBeforeCompositionOrSpawnWithSliceLExplanation()
|
||||
public async Task LinuxRejectsBothGraphicalModesBeforeCompositionOrSpawnWithUnsupportedPlatformExplanation()
|
||||
{
|
||||
var config = new RecordingConfigService();
|
||||
var supervisors = new FakeSupervisorFactory();
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ public sealed class GameRuntimeContractTests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void TraceRecorderIncludesJ4GameplayStateInCheckpoint()
|
||||
public void TraceRecorderIncludesGameplayStateInCheckpoint()
|
||||
{
|
||||
var recorder = new RuntimeTraceRecorder();
|
||||
var stamp = new RuntimeEventStamp(new(3), 1, 8);
|
||||
|
|
@ -222,7 +222,7 @@ public sealed class GameRuntimeContractTests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void J4GameplayOwnersHaveNoStaticMutableSessionState()
|
||||
public void GameplayOwnersHaveNoStaticMutableSessionState()
|
||||
{
|
||||
Type[] owners =
|
||||
[
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ namespace AcDream.Runtime.Tests.Gameplay;
|
|||
public sealed class RuntimeGameplayOwnershipTests
|
||||
{
|
||||
[Fact]
|
||||
public void J5LedgerConvergesEntityPhysicsAndGameplayAsOneLifetime()
|
||||
public void GameplayOwnershipLedgerConvergesEntityPhysicsAndGameplayAsOneLifetime()
|
||||
{
|
||||
var entities = new RuntimeEntityObjectLifetime();
|
||||
var inventory = new RuntimeInventoryState(entities);
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ namespace AcDream.Runtime.Tests;
|
|||
public sealed class RuntimeSimulationFixtureHostTests
|
||||
{
|
||||
[Fact]
|
||||
public void RuntimeOnlyHostDrivesCompleteJ5SimulationWithoutPresentation()
|
||||
public void RuntimeOnlyHostDrivesCompleteGameplaySimulationWithoutPresentation()
|
||||
{
|
||||
var host = new RuntimeOnlySimulationFixtureHost();
|
||||
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ public class KeyBindingsTests
|
|||
[Fact]
|
||||
public void AcdreamCurrentDefaults_binds_shift_as_hold_for_run()
|
||||
{
|
||||
// K.1b: when ShiftLeft is held the OS keyboard delivers
|
||||
// When ShiftLeft is held the OS keyboard delivers
|
||||
// CurrentModifiers=Shift, so the chord must be (ShiftLeft, Shift).
|
||||
// Lookup with the matching modifier mask succeeds.
|
||||
var b = KeyBindings.AcdreamCurrentDefaults();
|
||||
|
|
@ -111,11 +111,11 @@ public class KeyBindingsTests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void RetailDefaults_diverges_from_AcdreamCurrentDefaults_in_K1c()
|
||||
public void RetailDefaults_differs_from_legacy_AcdreamCurrentDefaults()
|
||||
{
|
||||
// K.1c flips RetailDefaults() to the retail-faithful preset.
|
||||
// The acdream-current map remains accessible (for tests pinning
|
||||
// the older WASD-only behavior), but RetailDefaults is now the
|
||||
// RetailDefaults is the retail-faithful preset. The acdream-current
|
||||
// map remains accessible for tests pinning the older WASD-only
|
||||
// behavior, but RetailDefaults is now the
|
||||
// canonical startup source. The two MUST differ — at minimum
|
||||
// RetailDefaults binds X to Backup (retail) where AcdreamCurrent
|
||||
// bound X to StrafeRight, and RetailDefaults binds Tab to
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue