using System.Numerics; using System.Runtime.InteropServices; using XFEEDToolBox.Core.Rendering; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public sealed class GalaxyOriginalTradeGeometryTests { [Test] public void CurrentTradeMeshHasTheAuthoredCentresAndSharedSeams() { var mesh = GalaxyOriginalTradeGeometry.RouteMesh; Check.Equal(50, mesh.HalfVertices.Count); Check.Equal(192, mesh.Indices.Count); Check.That(mesh.Indices.All(i => i < mesh.HalfVertices.Count)); Check.Equal(GalaxyOriginalTradeGeometry.PackHalf4(0,-1,0,0),mesh.HalfVertices[0]); Check.Equal(GalaxyOriginalTradeGeometry.PackHalf4(.03125f,0,.03125f,.5f),mesh.HalfVertices[2]); Check.Equal(GalaxyOriginalTradeGeometry.PackHalf4(1,1,1,1),mesh.HalfVertices[^1]); Check.Equal(4, GalaxyOriginalTradeGeometry.HotspotMesh.HalfVertices.Count); Check.Equal(6, GalaxyOriginalTradeGeometry.HotspotMesh.Indices.Count); } [Test] public void CurrentTradeKeepsHighAddressBitsDirectionAndCategoryInItsCurveSeed() { var a = GalaxyOriginalTradeGeometry.Random(9007199254740993, 11, 2); Check.That(a != GalaxyOriginalTradeGeometry.Random(1,11,2)); Check.That(a != GalaxyOriginalTradeGeometry.Random(11,9007199254740993,2)); Check.That(a != GalaxyOriginalTradeGeometry.Random(9007199254740993,11,3)); Check.That(a.Phase >= 0 && a.Phase < 1 && Vector3.Abs(a.MidOffset).X <= 1 && Vector3.Abs(a.MidOffset).Y <= 1 && Vector3.Abs(a.MidOffset).Z <= 1); var route = GalaxyOriginalTradeGeometry.Route(Vector3.Zero, Vector3.UnitX, 9007199254740993,11,2,.5f,.5f); Check.Equal(44, Marshal.SizeOf()); Check.Equal(0x80FFFFFFu, route.Colour); Check.Equal((ushort)0x3B33, (ushort)route.WidthTime); // .5*1.2+.3, rounded to original half precision. } [Test] public void CurrentTradeFlushesHalfSubnormalsAndHasTheActualFocusBoundary() { Check.Equal((ushort)0, GalaxyOriginalTradeGeometry.PackHalf(1e-5f)); Check.Equal((ushort)0x8000, GalaxyOriginalTradeGeometry.PackHalf(-1e-5f)); Check.Equal((ushort)0x0400, GalaxyOriginalTradeGeometry.PackHalf(0.00006103515625f)); Check.Equal(1f, GalaxyOriginalTradeGeometry.FocusFade(25)); Check.Equal(.5f, GalaxyOriginalTradeGeometry.FocusFade(26.5f)); Check.Equal(0f, GalaxyOriginalTradeGeometry.FocusFade(28)); Check.Equal(2, GalaxyOriginalTradeGeometry.HotspotCount(0)); Check.Equal(3, GalaxyOriginalTradeGeometry.HotspotCount(3)); Check.Equal(8, GalaxyOriginalTradeGeometry.HotspotCount(100)); } }