using System.Collections.Generic; using System.Diagnostics; using System.IO; using NUnit.Framework; using FlaxEngine; using Game; namespace GoakeTests.MapParser { public class MapParserTests { private byte[] aerowalkBytes; private MapEntity aerowalkRoot; private byte[] q1mapBytes; private byte[] dm4Bytes; [SetUp] public void Setup() { dm4Bytes = File.ReadAllBytes(@"C:\dev\GoakeFlax\Assets\Maps\dm4.map"); aerowalkBytes = File.ReadAllBytes(@"C:\dev\GoakeFlax\Assets\Maps\aerowalk.map"); aerowalkRoot = Game.MapParser.Parse(aerowalkBytes); q1mapBytes = File.ReadAllBytes(@"C:\dev\GoakeFlax\Assets\Maps\cube_q1.map"); } [TearDown] public void CleanUp() { } [Test] public void Perf_LoadQ1test() { List mapEntities = new List(100); Stopwatch sw = Stopwatch.StartNew(); for (int i = 0; i < 100; i++) { var root = Game.MapParser.Parse(q1mapBytes); Assert.IsTrue(root.entities[0].brushes.Count > 0); mapEntities.Add(root); } sw.Stop(); var elapsedMs = sw.Elapsed.TotalMilliseconds; TestContext.Out.WriteLine("Map parsing time: " + elapsedMs/100 + "ms"); } [Test] public void Perf_LoadDM4() { List mapEntities = new List(100); Stopwatch sw = Stopwatch.StartNew(); for (int i = 0; i < 100; i++) { var root = Game.MapParser.Parse(dm4Bytes); Assert.IsTrue(root.entities[0].brushes.Count > 0); mapEntities.Add(root); } sw.Stop(); var elapsedMs = sw.Elapsed.TotalMilliseconds; TestContext.Out.WriteLine("Map parsing time: " + elapsedMs/100 + "ms"); } [Test] public void Perf_LoadAerowalk() { List mapEntities = new List(100); Stopwatch sw = Stopwatch.StartNew(); for (int i = 0; i < 100; i++) { var root = Game.MapParser.Parse(aerowalkBytes); mapEntities.Add(root); } sw.Stop(); var elapsedMs = sw.Elapsed.TotalMilliseconds; TestContext.Out.WriteLine("Map parsing time: " + elapsedMs/100 + "ms"); } [Test] public void Perf_TriangulateAerowalk() { // warmup? //var roott = Game.MapParser.Parse(aerowalkBytes); List mapEntities = new List(100); aerowalkRoot = Game.MapParser.Parse(aerowalkBytes); /*for (int i = 0; i < 1; i++) { foreach (var ent in aerowalkRoot.entities) foreach (var brush in ent.brushes) { Q3MapImporter.TriangulateBrush(brush, out Vector3[] verts); Assert.IsTrue(verts.Length > 0); } }*/ Stopwatch sw = Stopwatch.StartNew(); for (int i = 0; i < 1; i++) { foreach (var ent in aerowalkRoot.entities) foreach (var brush in ent.brushes) { Q3MapImporter.TriangulateBrush(brush, out Float3[] verts); Assert.IsTrue(verts.Length > 0); } } sw.Stop(); var elapsedMs = sw.Elapsed.TotalMilliseconds; TestContext.Out.WriteLine("Triangulation time: " + elapsedMs + "ms"); } [Test] public void Perf_TriangulateQ1test() { // warmup? //var roott = Game.MapParser.Parse(aerowalkBytes); List mapEntities = new List(100); var root = Game.MapParser.Parse(q1mapBytes); Stopwatch sw = Stopwatch.StartNew(); for (int i = 0; i < 1; i++) { foreach (var ent in root.entities) foreach (var brush in ent.brushes) { Q3MapImporter.TriangulateBrush(brush, out Float3[] verts); Assert.IsTrue(verts.Length > 0); } } sw.Stop(); var elapsedMs = sw.Elapsed.TotalMilliseconds; TestContext.Out.WriteLine("Triangulation time: " + elapsedMs + "ms"); } } }