Выделить CorpseManager

This commit is contained in:
2026-08-19 03:43:20 +03:00
parent 62ee6877f9
commit cc3b5902cc
8 changed files with 436 additions and 69 deletions
@@ -0,0 +1,71 @@
package com.projectsacrifice.game;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
public final class CorpseManagerTest {
@Test
public void registeringBeyondTheBudgetEvictsTheOldestBodyAndReportsIt() {
CorpseManager manager = new CorpseManager(2);
CorpseManager.Body first = manager.register("SPIKE", 10f, 20f);
CorpseManager.Body second = manager.register("SAW", 30f, 40f);
CorpseManager.Body third = manager.register("FREEZE", 50f, 60f);
assertEquals(2, manager.count());
assertSame(second, manager.bodies().get(0));
assertSame(third, manager.bodies().get(1));
assertEquals(3L, manager.diagnostics().registered());
assertEquals(1L, manager.diagnostics().evicted());
assertEquals(first.id() + 1L, second.id());
}
@Test
public void removeAndResetAreIdempotentAndHaveSeparateDiagnostics() {
CorpseManager manager = new CorpseManager(3);
CorpseManager.Body first = manager.register("SPIKE", 10f, 20f);
manager.register("SAW", 30f, 40f);
assertTrue(manager.remove(first));
assertFalse(manager.remove(first));
manager.reset();
assertEquals(0, manager.count());
assertEquals(1L, manager.diagnostics().removed());
assertEquals(1L, manager.diagnostics().resets());
assertEquals(1L, manager.diagnostics().clearedByReset());
}
@Test
public void ownedBodiesExposePhysicsFactsAndComposableTransformations() {
CorpseManager manager = new CorpseManager(3);
CorpseManager.Body body = manager.register("ELECTRIC", 10f, 20f)
.position(30f, 40f)
.size(104f, 54f)
.velocity(12f, -8f)
.grounded(true)
.supportIndex(2);
assertTrue(manager.transform(body, CorpseManager.Transformation.FROZEN));
assertTrue(manager.transform(body, CorpseManager.Transformation.CONDUCTIVE));
assertTrue(manager.transform(body, CorpseManager.Transformation.PINNED));
assertEquals(30f, body.x(), 0f);
assertEquals(40f, body.y(), 0f);
assertEquals(104f, body.width(), 0f);
assertEquals(54f, body.height(), 0f);
assertEquals(12f, body.velocityX(), 0f);
assertEquals(-8f, body.velocityY(), 0f);
assertTrue(body.frozen());
assertTrue(body.conductive());
assertTrue(body.pinned());
assertTrue(body.grounded());
assertEquals(2, body.supportIndex());
CorpseManager.Body foreign = new CorpseManager(1).register("SAW", 0f, 0f);
assertFalse(manager.transform(foreign, CorpseManager.Transformation.FROZEN));
}
}