PKHeX/Tests/PKHeX.Tests/Simulator/ShowdownSetTests.cs

142 lines
4.2 KiB
C#
Raw Normal View History

using System.Diagnostics;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using PKHeX.Core;
namespace PKHeX.Tests.Simulator
{
[TestClass]
public class ShowdownSetTests
{
private const string SimulatorParse = "Set Parsing Tests";
static ShowdownSetTests()
{
// Initialize the Mystery Gift Databases for generating
EncounterEvent.RefreshMGDB();
}
[TestMethod]
[TestCategory(SimulatorParse)]
public void SimulatorGetParse()
{
foreach (var setstr in Sets)
{
var set = new ShowdownSet(setstr).Text;
var lines = set.Split('\n').Select(z => z.Trim());
Assert.IsTrue(lines.All(z => setstr.Contains(z)), setstr);
}
}
[TestMethod]
[TestCategory(SimulatorParse)]
public void SimulatorGetEncounters()
{
var set = new ShowdownSet(SetGlaceonUSUMTutor);
var pk7 = new PK7 {Species = set.Species, AltForm = set.FormIndex, Moves = set.Moves};
var encs = EncounterMovesetGenerator.GenerateEncounters(pk7, set.Moves, GameVersion.MN);
Assert.IsTrue(!encs.Any());
pk7.HT_Name = "PKHeX";
encs = EncounterMovesetGenerator.GenerateEncounters(pk7, set.Moves, GameVersion.MN);
var first = encs.FirstOrDefault();
Assert.IsTrue(first != null);
var egg = (EncounterEgg)first;
var info = new SimpleTrainerInfo();
var pk = egg.ConvertToPKM(info);
Assert.IsTrue(pk.Species != set.Species);
var la = new LegalityAnalysis(pk);
Assert.IsTrue(la.Valid);
var test = EncounterMovesetGenerator.GeneratePKMs(pk7, info).ToList();
foreach (var t in test)
{
var la2 = new LegalityAnalysis(t);
Assert.IsTrue(la2.Valid);
}
}
[TestMethod]
[TestCategory(SimulatorParse)]
public void SimulatorGetWC3()
{
var set = new ShowdownSet(SetROCKSMetang);
var pk3 = new PK3 { Species = set.Species, AltForm = set.FormIndex, Moves = set.Moves };
var encs = EncounterMovesetGenerator.GenerateEncounters(pk3, set.Moves, GameVersion.R);
Assert.IsTrue(encs.Any());
encs = EncounterMovesetGenerator.GenerateEncounters(pk3, set.Moves, GameVersion.R);
var first = encs.FirstOrDefault();
Assert.IsTrue(first != null);
var wc3 = (WC3)first;
var info = new SimpleTrainerInfo();
var pk = wc3.ConvertToPKM(info);
var la = new LegalityAnalysis(pk);
Assert.IsTrue(la.Valid);
}
//[TestMethod]
//[TestCategory(SimulatorParse)]
public void TestGenerate()
{
int count = 0;
var tr = new SimpleTrainerInfo();
for (int i = 1; i <= 807; i++)
{
var pk = new PK7 { Species = i };
pk.Gender = pk.GetSaneGender();
var ez = EncounterMovesetGenerator.GeneratePKMs(pk, tr);
Debug.WriteLine($"Starting {i:000}");
foreach (var e in ez)
{
var la = new LegalityAnalysis(e);
Assert.IsTrue(la.Valid);
count++;
}
Debug.WriteLine($"Finished {i:000}");
}
Debug.WriteLine($"Generated {count} PKMs!");
}
private const string SetROCKSMetang =
@"Metang
IVs: 20 HP / 3 Atk / 26 Def / 1 SpA / 6 SpD / 8 Spe
Ability: Clear Body
Level: 30
Adamant Nature
- Take Down
- Confusion
- Metal Claw
- Refresh";
private const string SetGlaceonUSUMTutor =
@"Glaceon (F) @ Assault Vest
IVs: 0 Atk
EVs: 252 HP / 252 SpA / 4 SpD
Ability: Ice Body
Level: 100
Shiny: Yes
Modest Nature
- Blizzard
- Water Pulse
- Shadow Ball
- Hyper Voice";
private static readonly string[] Sets =
{
SetGlaceonUSUMTutor,
@"Greninja @ Choice Specs
Ability: Battle Bond
EVs: 252 SpA / 4 SpD / 252 Spe
Timid Nature
- Hydro Pump
- Spikes
- Water Shuriken
- Dark Pulse",
};
}
}