Выделить CorpseManager
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user