using Barotrauma.Utils; using FluentAssertions; using FsCheck; using Microsoft.Xna.Framework; using System; using Xunit; namespace TestProject; public class CoordinateSpace2DTests { class CustomGenerators { public static Arbitrary Vector2Generator() { const int intRange = 1 << 22; const float intToFloat = 1 << 19; return Arb.From( from int x in Gen.Choose(-intRange, intRange) from int y in Gen.Choose(-intRange, intRange) select new Vector2(x / intToFloat, y / intToFloat)); } } public CoordinateSpace2DTests() { Arb.Register(); } [Fact] public void TestLocalToCanonical() { void testCase(Tuple args) { var (vector, origin, i, j) = args; if (Vector2.DistanceSquared(i, j) <= 0.01f) { return; } var space = new CoordinateSpace2D { Origin = origin, I = i, J = j }; Assert.True(Vector2.DistanceSquared( Vector2.Transform(vector, space.LocalToCanonical), origin + vector.X * i + vector.Y * j) < 0.01f); } Prop.ForAll( Arb.Generate>().ToArbitrary(), testCase).QuickCheckThrowOnFailure(); } }