using System; using UnitTestSharp; namespace Annulus.UnitTests { public class FlatHexDirectionExtensionsTests : TestFixture { public class OppositeTests : TestFixture { public void SouthEastIsNorthWest() { CheckEqual(FlatHexDirection.NorthWest, FlatHexDirection.SouthEast.Opposite()); } public void SouthIsNorth() { CheckEqual(FlatHexDirection.North, FlatHexDirection.South.Opposite()); } public void SouthWestIsNorthEast() { CheckEqual(FlatHexDirection.NorthEast, FlatHexDirection.SouthWest.Opposite()); } public void IsItsOwnInverse() { for (var direction = FlatHexDirection.SouthEast; direction <= FlatHexDirection.NorthEast; ++direction) { CheckEqual(direction, direction.Opposite().Opposite()); } } public void NotAHexDirection_Throws() { CheckThrow(typeof(ArgumentOutOfRangeException)); ((FlatHexDirection)6).Opposite(); } } public class RotatedClockwiseTests : TestFixture { public void OneSixthTurnFromSouthEastIsSouth() { CheckEqual(FlatHexDirection.South, FlatHexDirection.SouthEast.RotatedClockwise(1)); } public void WrapsPastNorthEastBackToSouthEast() { CheckEqual(FlatHexDirection.SouthEast, FlatHexDirection.NorthEast.RotatedClockwise(1)); } public void NegativeTurnsGoCounterclockwise() { CheckEqual(FlatHexDirection.NorthEast, FlatHexDirection.SouthEast.RotatedClockwise(-1)); } public void NotAHexDirection_Throws() { CheckThrow(typeof(ArgumentOutOfRangeException)); ((FlatHexDirection)(-1)).RotatedClockwise(1); } } } }