Add deterministic test simulation module
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
package com.livingworld.testing;
|
||||
|
||||
import com.livingworld.data.serialization.PersistenceReader;
|
||||
import com.livingworld.data.serialization.PersistenceWriter;
|
||||
import com.livingworld.events.LivingWorldEvent;
|
||||
import com.livingworld.modules.ModuleContext;
|
||||
import com.livingworld.modules.ModuleMetadata;
|
||||
import com.livingworld.modules.ModuleUpdateResult;
|
||||
import com.livingworld.modules.RegionUpdateContext;
|
||||
import com.livingworld.modules.ServerContext;
|
||||
import com.livingworld.modules.SimulationModule;
|
||||
import com.livingworld.regions.Region;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Deterministic module used to exercise the simulation engine in tests.
|
||||
*/
|
||||
public final class TestSimulationModule implements SimulationModule {
|
||||
|
||||
public static final String MODULE_ID = "test";
|
||||
|
||||
private static final ModuleMetadata METADATA = new ModuleMetadata(
|
||||
MODULE_ID,
|
||||
"Test Simulation Module",
|
||||
"1.0.0",
|
||||
"Deterministic module for engine tests.",
|
||||
"1",
|
||||
List.of(),
|
||||
List.of(),
|
||||
true,
|
||||
true,
|
||||
false);
|
||||
|
||||
private boolean initialized;
|
||||
private int updateCount;
|
||||
|
||||
@Override
|
||||
public String getModuleId() {
|
||||
return MODULE_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModuleMetadata getMetadata() {
|
||||
return METADATA;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize(ModuleContext context) {
|
||||
if (context == null) {
|
||||
throw new IllegalArgumentException("context must not be null");
|
||||
}
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServerStarted(ServerContext context) {
|
||||
// No server resources are needed by the test module.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createDefaultRegionData(Region region) {
|
||||
// The test module keeps deterministic counters outside region data.
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModuleUpdateResult updateRegion(RegionUpdateContext context) {
|
||||
if (context == null) {
|
||||
throw new IllegalArgumentException("context must not be null");
|
||||
}
|
||||
updateCount++;
|
||||
return updateCount % 10 == 0
|
||||
? ModuleUpdateResult.changed()
|
||||
: ModuleUpdateResult.noChange();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLivingWorldEvent(LivingWorldEvent event) {
|
||||
// The test module does not consume events.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveModuleData(PersistenceWriter writer) {
|
||||
// The counter is intentionally transient test state.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadModuleData(PersistenceReader reader) {
|
||||
// The counter is intentionally transient test state.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void shutdown() {
|
||||
// No resources to release.
|
||||
}
|
||||
|
||||
public boolean isInitialized() {
|
||||
return initialized;
|
||||
}
|
||||
|
||||
public int getUpdateCount() {
|
||||
return updateCount;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user