42 lines
1.8 KiB
C#
42 lines
1.8 KiB
C#
using System.Collections.Immutable;
|
|
using SideScrollerGame.Sim.Definitions;
|
|
using SideScrollerGame.Sim.Input;
|
|
|
|
namespace SideScrollerGame.Sim.Tests;
|
|
|
|
public sealed class SimulationSerializationTests
|
|
{
|
|
[Fact]
|
|
public void SaveStateLoadState_PreservesStateAndNextStepHash()
|
|
{
|
|
var definition = SimulationTestFactory.CreateGameDefinition(triggers: ImmutableArray.Create(new TriggerDefinition("checkpoint_a", new(new(11, 21), new(12, 22)), "TriggerActivated")));
|
|
var config = SimulationTestFactory.CreateConfig();
|
|
|
|
Simulation original = new(definition, config, 17);
|
|
original.Step(SimulationTestFactory.CreateTick(1, new MoveAxisChanged(new(1), 1, 1)));
|
|
|
|
var bytes = original.SaveState();
|
|
var loaded = Simulation.LoadState(bytes, definition, config);
|
|
|
|
Assert.Equal(original.CurrentTick, loaded.CurrentTick);
|
|
Assert.Equal(original.CurrentSnapshot.StateHash, loaded.CurrentSnapshot.StateHash);
|
|
Assert.Equal(original.CurrentState.GetRequiredPlayer(new(1)).Health, loaded.CurrentState.GetRequiredPlayer(new(1)).Health);
|
|
Assert.Equal(original.CurrentState.ActivatedTriggerIds, loaded.CurrentState.ActivatedTriggerIds);
|
|
|
|
var nextBatch = SimulationTestFactory.CreateTick(2, new ButtonChanged(new(1), InputButton.FirePrimary, true));
|
|
var originalHash = original.Step(nextBatch).StateHash;
|
|
var loadedHash = loaded.Step(nextBatch).StateHash;
|
|
|
|
Assert.Equal(originalHash, loadedHash);
|
|
}
|
|
|
|
[Fact]
|
|
public void Constructor_NormalizesZeroSeed()
|
|
{
|
|
Simulation simulation = new(SimulationTestFactory.CreateGameDefinition(), SimulationTestFactory.CreateConfig(), 0);
|
|
|
|
simulation.Step(TickActionBatch.Empty(1));
|
|
|
|
Assert.NotEqual(0UL, simulation.CurrentState.RandomState);
|
|
}
|
|
} |