Skip to content

Commit 475effd

Browse files
committed
add tests
1 parent 6950375 commit 475effd

File tree

6 files changed

+319
-76
lines changed

6 files changed

+319
-76
lines changed

src/dsstats.maui/dsstats.builder/dsstats.builder.tests/FenSharedTests.cs

Lines changed: 18 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,45 +6,29 @@ namespace dsstats.builder.tests;
66
[TestClass]
77
public sealed class FenSharedTests
88
{
9-
// [TestMethod]
10-
// public void FenRoundTrip_FromSpawnDto()
11-
// {
12-
// var spawn = new SpawnDto
13-
// {
14-
// Units = new List<SpawnUnitDto>
15-
// {
16-
// new() { Unit = new() { Name = "Zergling" }, Poss = "91,80" },
17-
// new() { Unit = new() { Name = "Mutalisk" }, Poss = "92,81" },
18-
// }
19-
// };
20-
21-
// var cmdr = Commander.Zerg;
22-
// int team = 2;
23-
24-
// var fen = DsFen.GetFen(spawn, cmdr, team);
9+
[TestMethod]
10+
public void FenRoundTrip_FromSpawnDto()
11+
{
12+
var spawn = new SpawnDto
13+
{
14+
Units = new List<SpawnUnitDto>
15+
{
16+
new() { Unit = new() { Name = "Zergling" }, Poss = "91,80" },
17+
new() { Unit = new() { Name = "Mutalisk" }, Poss = "92,81" },
18+
}
19+
};
2520

26-
// var newSpawn = new SpawnDto { Units = [] };
27-
// DsFen.ApplyFen(fen, newSpawn, out cmdr, out team);
21+
var cmdr = Commander.Zerg;
22+
int team = 2;
2823

29-
// var newFen = DsFen.GetFen(newSpawn, cmdr, team);
24+
var fen = DsFen.GetFen(spawn, cmdr, team);
3025

31-
// Assert.AreEqual(fen, newFen);
32-
// }
26+
var newSpawn = new SpawnDto { Units = [] };
27+
DsFen.ApplyFen(fen, newSpawn, out cmdr, out team);
3328

34-
[TestMethod]
35-
public void CanApplyRlFenString()
36-
{
37-
string fen = "2:Terran;10q15/9q16/8q17/7q18/6q15q3/5q17w2/4q18qe1/3q19qqw/2q20qq1/1q20qq2/q20qq3/19eqq4/19qw5/18qq6/17qq7/16qq8/15qq9/14qq10/12eqq11/11qqw12/11qq13/5q4qq14/6wqqqq15/7eqq16/8w17|26/19z6/26/26/26/26/26/26/26/21d4/26/19d6/26/15f1d8/26/15d10/26/13d12/2z23/11d14/26/9d16/26/26/26";
38-
var cmdr = Commander.None;
39-
int team = 0;
40-
var spawn = new SpawnDto();
41-
DsFen.ApplyFen(fen, spawn, out cmdr, out team);
29+
var newFen = DsFen.GetFen(newSpawn, cmdr, team);
4230

43-
var marines = spawn.Units
44-
.Where(u => u.Unit.Name == "Marine")
45-
.FirstOrDefault();
46-
Assert.IsNotNull(marines);
47-
Assert.AreEqual(49, marines.Count);
31+
Assert.AreEqual(fen, newFen);
4832
}
4933

5034
[TestMethod]
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
using dsstats.shared.DsFen;
2+
3+
namespace dsstats.builder.tests;
4+
5+
[TestClass]
6+
public class FenTests
7+
{
8+
[TestMethod]
9+
public void CanGetFenString()
10+
{
11+
DsFenGrid grid = new()
12+
{
13+
Team = 1,
14+
Commander = shared.Commander.Protoss,
15+
Units = new Dictionary<BuildOption, List<DsPoint>>
16+
{
17+
{ new('q'), new List<DsPoint> { new(1, 1), new(1, 2) } },
18+
}
19+
};
20+
string fen = DsFenBuilder.GetFenString(grid);
21+
Assert.IsNotNull(fen);
22+
}
23+
24+
[TestMethod]
25+
public void CanRoundTripFen()
26+
{
27+
var buildOption = new BuildOption('q');
28+
DsFenGrid grid = new()
29+
{
30+
Team = 1,
31+
Commander = shared.Commander.Protoss,
32+
Units = new Dictionary<BuildOption, List<DsPoint>>
33+
{
34+
{ buildOption, new List<DsPoint> { new(1, 1), new(1, 2) } },
35+
}
36+
};
37+
string fen = DsFenBuilder.GetFenString(grid);
38+
DsFenGrid newGrid = DsFenBuilder.GetGridFromString(fen);
39+
Assert.AreEqual(grid.Team, newGrid.Team);
40+
Assert.AreEqual(grid.Commander, newGrid.Commander);
41+
CollectionAssert.AreEquivalent(grid.Units[buildOption], newGrid.Units[buildOption]);
42+
}
43+
44+
[TestMethod]
45+
public void CanGetFenString_WithAirUnits()
46+
{
47+
DsFenGrid grid = new()
48+
{
49+
Team = 2,
50+
Commander = shared.Commander.Zerg,
51+
Units = new Dictionary<BuildOption, List<DsPoint>>
52+
{
53+
{ new('g', IsAir: false), new List<DsPoint> { new(5, 5) } },
54+
{ new('a', IsAir: true), new List<DsPoint> { new(5, 5) } },
55+
}
56+
};
57+
58+
string fen = DsFenBuilder.GetFenString(grid);
59+
Assert.IsNotNull(fen);
60+
Assert.IsTrue(fen.Contains("|"));
61+
}
62+
63+
[TestMethod]
64+
public void CanRoundTripFen_WithAirUnits()
65+
{
66+
var groundOption = new BuildOption('g', IsAir: false);
67+
var airOption = new BuildOption('a', IsAir: true);
68+
69+
DsFenGrid grid = new()
70+
{
71+
Team = 3,
72+
Commander = shared.Commander.Terran,
73+
Units = new Dictionary<BuildOption, List<DsPoint>>
74+
{
75+
{ groundOption, new List<DsPoint> { new(10, 10) } },
76+
{ airOption, new List<DsPoint> { new(10, 10), new(2, 3) } }
77+
}
78+
};
79+
80+
string fen = DsFenBuilder.GetFenString(grid);
81+
DsFenGrid parsed = DsFenBuilder.GetGridFromString(fen);
82+
83+
Assert.AreEqual(grid.Team, parsed.Team);
84+
Assert.AreEqual(grid.Commander, parsed.Commander);
85+
Assert.IsTrue(parsed.Units.ContainsKey(groundOption));
86+
Assert.IsTrue(parsed.Units.ContainsKey(airOption));
87+
CollectionAssert.AreEquivalent(grid.Units[groundOption], parsed.Units[groundOption]);
88+
CollectionAssert.AreEquivalent(grid.Units[airOption], parsed.Units[airOption]);
89+
}
90+
91+
}

src/dsstats.maui/dsstats.builder/dsstats.builder.tests/Polygon.Tests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,16 @@ public void CanNormalizePoint()
2626
Assert.AreEqual(0, normalizedPoint.Y);
2727
}
2828

29+
[TestMethod]
30+
public void CanNormalizePoint2()
31+
{
32+
var polygon = new Polygon(new(165, 174), new(182, 157), new(171, 146), new(154, 163));
33+
DsPoint point = new(160, 160);
34+
var normalizedPoint = polygon.GetNormalizedPoint(point);
35+
Assert.IsTrue(normalizedPoint.X >= 0, $"({normalizedPoint.X},{normalizedPoint.Y})");
36+
Assert.IsTrue(normalizedPoint.Y >= 0, $"({normalizedPoint.X},{normalizedPoint.Y})");
37+
}
38+
2939
[TestMethod]
3040
public void CanDeNormalizePoint()
3141
{

src/dsstats.shared/DsFen/DsFen.cs

Lines changed: 26 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System.Text;
2-
3-
namespace dsstats.shared.DsFen;
1+
namespace dsstats.shared.DsFen;
42

53
public static partial class DsFen
64
{
@@ -9,75 +7,65 @@ public static partial class DsFen
97

108
public static string GetFen(SpawnDto spawn, Commander cmdr, int team)
119
{
12-
StringBuilder sb = new();
1310
var build = CmdrBuildFactory.Create(cmdr);
1411
if (build is null)
1512
{
1613
return string.Empty;
1714
}
1815
var polygon = team == 1 ? polygon1 : polygon2;
1916

17+
DsFenGrid grid = new()
18+
{
19+
Team = team,
20+
Commander = cmdr,
21+
Units = new Dictionary<BuildOption, List<DsPoint>>()
22+
};
2023
foreach (var unit in spawn.Units)
2124
{
2225
var buildOption = build.GetUnitBuildOption(unit.Unit.Name);
2326
if (buildOption is null)
2427
{
2528
continue;
2629
}
27-
char unitChar = buildOption.Key;
28-
if (buildOption.RequiresToggle && !buildOption.IsActive)
29-
{
30-
unitChar = char.ToUpper(unitChar);
31-
}
3230
var points = GetPoints(unit.Poss);
31+
var spawnUnits = grid.Units[buildOption] = [];
3332
foreach (var point in points)
3433
{
3534
if (!polygon.IsPointInside(point))
3635
{
3736
continue;
38-
// apply fen like string
3937
}
40-
// Normalized point to a 25,17 (width,height) rectangle with bottom left at (0, 0)
41-
var normalizedPoint = polygon.GetNormalizedPoint(point);
38+
spawnUnits.Add(polygon.GetNormalizedPoint(point));
4239
}
4340
}
44-
45-
46-
return sb.ToString();
41+
return DsFenBuilder.GetFenString(grid);
4742
}
4843

4944
public static void ApplyFen(string fen, SpawnDto spawn, out Commander cmdr, out int team)
5045
{
51-
cmdr = Commander.None;
52-
team = 0;
53-
// identify team
54-
// identify commander
55-
// getNormalizedPoints
56-
var polygon = team == 1 ? polygon1 : polygon2;
46+
var grid = DsFenBuilder.GetGridFromString(fen);
47+
cmdr = grid.Commander;
48+
team = grid.Team;
5749
var build = CmdrBuildFactory.Create(cmdr);
5850
if (build is null)
5951
{
6052
return;
6153
}
62-
63-
// DeNormalize sample
64-
var point = new DsPoint(0, 0);
65-
char unitChar = 'a';
66-
bool isAir = false;
67-
bool isToggle = false;
68-
var unitString = build.GetUnitNameFromKey(unitChar, isAir, isToggle);
69-
if (string.IsNullOrEmpty(unitString))
54+
var polygon = team == 1 ? polygon1 : polygon2;
55+
foreach (var ent in grid.Units)
7056
{
71-
return;
57+
var unitName = build.GetUnitNameFromKey(ent.Key.Key, ent.Key.IsAir, ent.Key.RequiresToggle);
58+
if (string.IsNullOrEmpty(unitName))
59+
{
60+
continue;
61+
}
62+
var spawnUnit = new SpawnUnitDto()
63+
{
64+
Unit = new() { Name = unitName },
65+
Poss = string.Join(",", ent.Value.Select(s => polygon.GetDeNormalizedPoint(s)).Select(t => $"{t.X},{t.Y}"))
66+
};
67+
spawn.Units.Add(spawnUnit);
7268
}
73-
var deNormalizedPoint = polygon.GetDeNormalizedPoint(point);
74-
SpawnUnitDto spawnUnit = new()
75-
{
76-
Unit = new UnitDto { Name = unitString },
77-
Poss = $"{deNormalizedPoint.X},{deNormalizedPoint.Y}",
78-
Count = 1
79-
};
80-
spawn.Units.Add(spawnUnit);
8169
}
8270

8371
public static List<DsPoint> GetPoints(string possString)
@@ -94,5 +82,4 @@ public static List<DsPoint> GetPoints(string possString)
9482
}
9583
return points;
9684
}
97-
9885
}

0 commit comments

Comments
 (0)