From 3d664208b5e278325501fb2b54da90f4c6979ed4 Mon Sep 17 00:00:00 2001 From: Tim Van Baak Date: Thu, 15 Aug 2024 16:36:50 -0700 Subject: [PATCH] Add Season.First, replacing FIRST_TURN --- MultiversalDiplomacy/Model/Season.cs | 5 ++-- MultiversalDiplomacy/Model/Timelines.cs | 5 +--- MultiversalDiplomacy/Model/World.cs | 4 +-- .../Model/TimelineFactoryTest.cs | 28 +++++++++---------- .../SerializationTest.cs | 14 +++++----- MultiversalDiplomacyTests/UnitTests.cs | 2 +- 6 files changed, 28 insertions(+), 30 deletions(-) diff --git a/MultiversalDiplomacy/Model/Season.cs b/MultiversalDiplomacy/Model/Season.cs index 573252d..0df0f80 100644 --- a/MultiversalDiplomacy/Model/Season.cs +++ b/MultiversalDiplomacy/Model/Season.cs @@ -10,9 +10,10 @@ namespace MultiversalDiplomacy.Model; public struct Season(string timeline, int turn) { /// - /// The first turn number. This is defined to reduce confusion about whether the first turn is 0 or 1. + /// The root season of every game. This is defined to avoid any confusion about what the first turn or timeline + /// should be or what season to use to key into a fresh . /// - public const int FIRST_TURN = 0; + public static readonly Season First = new(Timelines.IntToString(0), 0); /// /// The timeline to which this season belongs. diff --git a/MultiversalDiplomacy/Model/Timelines.cs b/MultiversalDiplomacy/Model/Timelines.cs index 0751da9..e165bc4 100644 --- a/MultiversalDiplomacy/Model/Timelines.cs +++ b/MultiversalDiplomacy/Model/Timelines.cs @@ -75,10 +75,7 @@ public class Timelines(int next, Dictionary pasts) /// Create a new multiverse with an initial season. /// public static Timelines Create() - { - Season first = new(IntToString(0), Season.FIRST_TURN); - return new Timelines(1, new() { {first.Key, null} }); - } + => new(StringToInt(Season.First.Timeline) + 1, new() { {Season.First.Key, null} }); /// /// Create a continuation of a season if it has no futures, otherwise create a fork. diff --git a/MultiversalDiplomacy/Model/World.cs b/MultiversalDiplomacy/Model/World.cs index ea0c65b..b0368b0 100644 --- a/MultiversalDiplomacy/Model/World.cs +++ b/MultiversalDiplomacy/Model/World.cs @@ -181,7 +181,7 @@ public class World : splits.Length == 3 ? Map.GetWater(splits[2]) : Map.GetWater(splits[2], splits[3]); - Unit unit = Unit.Build(location.Key, new("a0"), power, type); + Unit unit = Unit.Build(location.Key, Season.First, power, type); return unit; }); return this.Update(units: units); @@ -229,7 +229,7 @@ public class World public Unit GetUnitAt(string provinceName, Season? season = null) { Province province = Map.GetProvince(provinceName); - season ??= new("a0"); + season ??= Season.First; Unit? foundUnit = this.Units.SingleOrDefault( u => Map.GetLocation(u!).Province == province && u!.Season == season, null) diff --git a/MultiversalDiplomacyTests/Model/TimelineFactoryTest.cs b/MultiversalDiplomacyTests/Model/TimelineFactoryTest.cs index 8b83a98..46d4f2d 100644 --- a/MultiversalDiplomacyTests/Model/TimelineFactoryTest.cs +++ b/MultiversalDiplomacyTests/Model/TimelineFactoryTest.cs @@ -36,12 +36,12 @@ public class TimelineFactoryTest public void NoSharedFactoryState() { Timelines one = Timelines.Create() - .WithNewSeason(new Season("a0"), out var s1) - .WithNewSeason(new Season("a0"), out var s2) - .WithNewSeason(new Season("a0"), out var s3); + .WithNewSeason(Season.First, out var s1) + .WithNewSeason(Season.First, out var s2) + .WithNewSeason(Season.First, out var s3); Timelines two = Timelines.Create() - .WithNewSeason(new Season("a0"), out var s4) - .WithNewSeason(new Season("a0"), out var s5); + .WithNewSeason(Season.First, out var s4) + .WithNewSeason(Season.First, out var s5); Assert.That(s1.Timeline, Is.EqualTo("a")); Assert.That(s2.Timeline, Is.EqualTo("b")); @@ -54,14 +54,14 @@ public class TimelineFactoryTest public void TimelineForking() { Timelines timelines = Timelines.Create() - .WithNewSeason("a0", out var a1) + .WithNewSeason(Season.First, out var a1) .WithNewSeason(a1, out var a2) .WithNewSeason(a2, out var a3) .WithNewSeason(a1, out var b2) .WithNewSeason(b2, out var b3) .WithNewSeason(a1, out var c2) .WithNewSeason(a2, out var d3); - Season a0 = new("a0"); + Season a0 = Season.First; Assert.That( timelines.Pasts.Keys, @@ -76,13 +76,13 @@ public class TimelineFactoryTest Assert.That(c2.Timeline, Is.EqualTo("c"), "Unexpected second alt"); Assert.That(d3.Timeline, Is.EqualTo("d"), "Unexpected third alt"); - Assert.That(a1.Turn, Is.EqualTo(Season.FIRST_TURN + 1), "Unexpected a1 turn number"); - Assert.That(a2.Turn, Is.EqualTo(Season.FIRST_TURN + 2), "Unexpected a2 turn number"); - Assert.That(a3.Turn, Is.EqualTo(Season.FIRST_TURN + 3), "Unexpected a3 turn number"); - Assert.That(b2.Turn, Is.EqualTo(Season.FIRST_TURN + 2), "Unexpected b2 turn number"); - Assert.That(b3.Turn, Is.EqualTo(Season.FIRST_TURN + 3), "Unexpected b3 turn number"); - Assert.That(c2.Turn, Is.EqualTo(Season.FIRST_TURN + 2), "Unexpected c2 turn number"); - Assert.That(d3.Turn, Is.EqualTo(Season.FIRST_TURN + 3), "Unexpected d3 turn number"); + Assert.That(a1.Turn, Is.EqualTo(Season.First.Turn + 1), "Unexpected a1 turn number"); + Assert.That(a2.Turn, Is.EqualTo(Season.First.Turn + 2), "Unexpected a2 turn number"); + Assert.That(a3.Turn, Is.EqualTo(Season.First.Turn + 3), "Unexpected a3 turn number"); + Assert.That(b2.Turn, Is.EqualTo(Season.First.Turn + 2), "Unexpected b2 turn number"); + Assert.That(b3.Turn, Is.EqualTo(Season.First.Turn + 3), "Unexpected b3 turn number"); + Assert.That(c2.Turn, Is.EqualTo(Season.First.Turn + 2), "Unexpected c2 turn number"); + Assert.That(d3.Turn, Is.EqualTo(Season.First.Turn + 3), "Unexpected d3 turn number"); Assert.That(timelines.GetTimelineRoot(a0), Is.EqualTo(a0), "Expected timeline root to be reflexive"); Assert.That(timelines.GetTimelineRoot(a3), Is.EqualTo(a0), "Expected trunk timeline to have root"); diff --git a/MultiversalDiplomacyTests/SerializationTest.cs b/MultiversalDiplomacyTests/SerializationTest.cs index aa52449..5625a28 100644 --- a/MultiversalDiplomacyTests/SerializationTest.cs +++ b/MultiversalDiplomacyTests/SerializationTest.cs @@ -65,9 +65,9 @@ public class SerializationTest Assert.That(tyr0, Is.NotDislodged); setup.UpdateWorld(); - Assert.That(setup.World.OrderHistory["a0"].Orders.Count, Is.GreaterThan(0), "Missing orders"); - Assert.That(setup.World.OrderHistory["a0"].DoesMoveOutcomes.Count, Is.GreaterThan(0), "Missing moves"); - Assert.That(setup.World.OrderHistory["a0"].IsDislodgedOutcomes.Count, Is.GreaterThan(0), "Missing dislodges"); + Assert.That(setup.World.OrderHistory[s0.Key].Orders.Count, Is.GreaterThan(0), "Missing orders"); + Assert.That(setup.World.OrderHistory[s0.Key].DoesMoveOutcomes.Count, Is.GreaterThan(0), "Missing moves"); + Assert.That(setup.World.OrderHistory[s0.Key].IsDislodgedOutcomes.Count, Is.GreaterThan(0), "Missing dislodges"); // Serialize and deserialize the world string serialized = JsonSerializer.Serialize(setup.World, Options); @@ -75,9 +75,9 @@ public class SerializationTest ?? throw new AssertionException("Failed to reserialize world"); Assert.Multiple(() => { - Assert.That(reserialized.OrderHistory["a0"].Orders.Count, Is.GreaterThan(0), "Missing orders"); - Assert.That(reserialized.OrderHistory["a0"].DoesMoveOutcomes.Count, Is.GreaterThan(0), "Missing moves"); - Assert.That(reserialized.OrderHistory["a0"].IsDislodgedOutcomes.Count, Is.GreaterThan(0), "Missing dislodges"); + Assert.That(reserialized.OrderHistory[s0.Key].Orders.Count, Is.GreaterThan(0), "Missing orders"); + Assert.That(reserialized.OrderHistory[s0.Key].DoesMoveOutcomes.Count, Is.GreaterThan(0), "Missing moves"); + Assert.That(reserialized.OrderHistory[s0.Key].IsDislodgedOutcomes.Count, Is.GreaterThan(0), "Missing dislodges"); }); Assert.Ignore("Serialization doesn't fully work yet"); @@ -86,7 +86,7 @@ public class SerializationTest setup = new(reserialized, MovementPhaseAdjudicator.Instance); setup[("a", 1)] ["Germany"] - .Army("Mun").Supports.Army("Mun", season: new("a0")).MoveTo("Tyr").GetReference(out var mun1) + .Army("Mun").Supports.Army("Mun", season: s0).MoveTo("Tyr").GetReference(out var mun1) ["Austria"] .Army("Tyr").Holds(); diff --git a/MultiversalDiplomacyTests/UnitTests.cs b/MultiversalDiplomacyTests/UnitTests.cs index d9fa565..f10dac6 100644 --- a/MultiversalDiplomacyTests/UnitTests.cs +++ b/MultiversalDiplomacyTests/UnitTests.cs @@ -13,7 +13,7 @@ public class UnitTests Location Mun = world.Map.GetLand("Mun"), Boh = world.Map.GetLand("Boh"), Tyr = world.Map.GetLand("Tyr"); - Season a0 = new("a0"); + Season a0 = Season.First; Unit u1 = Unit.Build(Mun.Key, a0, "Austria", UnitType.Army); world = world.WithNewSeason(a0, out Season a1);