using OneClickRun.Core.Logic; using Xunit; namespace OneClickRun.Core.Tests; public class WheelMathTests { [Theory] [InlineData(0, 0)] [InlineData(44.9, 0)] [InlineData(45, 1)] [InlineData(90, 2)] [InlineData(359.9, 7)] [InlineData(-45, 7)] [InlineData(360, 0)] public void GetSectorIndex_MapsAngles(double angle, int expected) { Assert.Equal(expected, WheelMath.GetSectorIndex(8, angle)); } [Fact] public void GetSectorIndex_SingleSector_AlwaysZero() { Assert.Equal(0, WheelMath.GetSectorIndex(1, 123.4)); } [Fact] public void GetSectorIndex_NoSectors_ReturnsMinusOne() { Assert.Equal(-1, WheelMath.GetSectorIndex(0, 10)); } [Theory] [InlineData(0, -1, 0)] [InlineData(1, 0, 90)] [InlineData(0, 1, 180)] [InlineData(-1, 0, 270)] public void AngleFromVector_CardinalDirections(double dx, double dy, double expected) { Assert.Equal(expected, WheelMath.AngleFromVector(dx, dy), 3); } [Fact] public void PolarPoint_Top() { var (x, y) = WheelMath.PolarPoint(100, 100, 50, 0); Assert.Equal(100, x, 3); Assert.Equal(50, y, 3); } [Fact] public void PolarPoint_Right() { var (x, y) = WheelMath.PolarPoint(100, 100, 50, 90); Assert.Equal(150, x, 3); Assert.Equal(100, y, 3); } [Fact] public void TryGetSwipeIndex_DeadZone_ReturnsFalse() { Assert.False(WheelMath.TryGetSwipeIndex(8, 5, 0, 10, out _)); } [Fact] public void TryGetSwipeIndex_NoCommands_ReturnsFalse() { Assert.False(WheelMath.TryGetSwipeIndex(0, 100, 0, 10, out _)); } [Theory] [InlineData(0, -100, 0)] [InlineData(100, 0, 2)] [InlineData(0, 100, 4)] [InlineData(-100, 0, 6)] public void TryGetSwipeIndex_Directions(double dx, double dy, int expected) { Assert.True(WheelMath.TryGetSwipeIndex(8, dx, dy, 10, out int index)); Assert.Equal(expected, index); } }