public void TestFromSquareIndexAndFromSquareIndexInternal() { for (var squareIndex = 0; squareIndex < ChessConstants.SquareCount; squareIndex++) { var expectedValue = 1UL << squareIndex; var bitboard = Bitboard.FromSquareIndex(squareIndex); Assert.That(bitboard.InternalValue, Is.EqualTo(expectedValue)); var internalValue = Bitboard.FromSquareIndexInternal(squareIndex); Assert.That(internalValue, Is.EqualTo(expectedValue)); } }
public void TestFromSquareIndexAndFromSquareIndexInternalNegativeCases(int squareIndex) { const string ParameterName = "squareIndex"; Assert.That( () => Bitboard.FromSquareIndex(squareIndex), Throws.TypeOf <ArgumentOutOfRangeException>() .With .Property(nameof(ArgumentOutOfRangeException.ParamName)) .EqualTo(ParameterName)); Assert.That( () => Bitboard.FromSquareIndexInternal(squareIndex), Throws.TypeOf <ArgumentOutOfRangeException>() .With .Property(nameof(ArgumentOutOfRangeException.ParamName)) .EqualTo(ParameterName)); }
public void TestPerformance() { const int Count = 1000 * 1000 * 1000; var value1 = Bitboard.FromSquareIndexInternal(1); var value2 = Bitboard.FromSquareIndexInternal(2); var value3 = value1 | value2; var bitboardStopwatch = Stopwatch.StartNew(); for (var index = 0; index < Count; index++) { var bitboard1 = new Bitboard(value1); var bitboard2 = new Bitboard(value2); var bitboard3 = new Bitboard(value3); var bitboard = (bitboard1 | bitboard2) & ~bitboard3; if (bitboard.IsAny) { Assert.Fail(); } } bitboardStopwatch.Stop(); Console.WriteLine(@"Bitboard performance @ {0}: {1}", Count, bitboardStopwatch.Elapsed); var valueStopwatch = Stopwatch.StartNew(); for (var index = 0; index < Count; index++) { var value = (value1 | value2) & ~value3; if (value != 0) { Assert.Fail(); } } valueStopwatch.Stop(); Console.WriteLine(@"Value performance @ {0}: {1}", Count, valueStopwatch.Elapsed); var ratio = (double)bitboardStopwatch.ElapsedTicks / valueStopwatch.ElapsedTicks; Console.WriteLine(@"Ratio: {0}", ratio); }