Убрать аллокации из игрового hot path
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
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 static org.junit.Assert.assertNotSame;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
public final class AccessibilityStateCacheTest {
|
||||
@Test
|
||||
public void unchangedFramesReuseOneStatusAndOneDeduplicatedSignalSet() {
|
||||
AccessibilityStateCache cache = new AccessibilityStateCache();
|
||||
cache.configureSignals(Arrays.asList("lift", "lift", "door"));
|
||||
|
||||
assertEquals(Arrays.asList("lift", "door"), cache.signalIds());
|
||||
assertTrue(cache.update(GameStrings.forLanguage(GameLanguage.EN), 1, 0, 1, true));
|
||||
String first = cache.statusText();
|
||||
|
||||
for (int frame = 0; frame < 600; frame++) {
|
||||
assertFalse(cache.update(GameStrings.forLanguage(GameLanguage.EN), 1, 0, 1, true));
|
||||
assertSame(first, cache.statusText());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void criticalStateAndLanguageChangesInvalidateExactlyOnce() {
|
||||
AccessibilityStateCache cache = new AccessibilityStateCache();
|
||||
cache.configureSignals(Arrays.asList("plate"));
|
||||
cache.update(GameStrings.forLanguage(GameLanguage.EN), 0, 0, 1, true);
|
||||
String initial = cache.statusText();
|
||||
|
||||
assertTrue(cache.update(GameStrings.forLanguage(GameLanguage.EN), 1, 1, 1, false));
|
||||
String changed = cache.statusText();
|
||||
assertNotSame(initial, changed);
|
||||
assertTrue(changed.contains("Signals 1/1"));
|
||||
assertTrue(changed.contains("Volunteer respawning"));
|
||||
assertFalse(cache.update(GameStrings.forLanguage(GameLanguage.EN), 1, 1, 1, false));
|
||||
|
||||
assertTrue(cache.update(GameStrings.forLanguage(GameLanguage.RU), 1, 1, 1, false));
|
||||
assertTrue(cache.statusText().contains("Сигналы 1/1"));
|
||||
assertFalse(cache.update(GameStrings.forLanguage(GameLanguage.RU), 1, 1, 1, false));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user