예제 #1
0
        public void TestGetSquaresAndGetFirstSquareAndGetSquareCountAndIsExactlyOneSquare(
            long value,
            params int[] expectedIndexesResult)
        {
            Assert.That(expectedIndexesResult, Is.Not.Null);

            var expectedGetSquares         = expectedIndexesResult.Select(squareIndex => new Square(squareIndex)).ToArray();
            var expectedGetBitSetCount     = expectedGetSquares.Length;
            var expectedIsExactlyOneBitSet = expectedIndexesResult.Length == 1;

            var expectedGetFirstSquareIndex = expectedIndexesResult.Length == 0
                ? default(int?)
                : expectedIndexesResult.Min();

            var bitboard = new Bitboard(value);

            Assert.That(bitboard.GetSquares(), Is.EquivalentTo(expectedGetSquares));
            Assert.That(bitboard.GetSquareCount(), Is.EqualTo(expectedGetBitSetCount));
            Assert.That(bitboard.IsExactlyOneSquare(), Is.EqualTo(expectedIsExactlyOneBitSet));

            Assert.That(
                () => bitboard.GetFirstSquare().SquareIndex,
                expectedGetFirstSquareIndex.HasValue
                    ? (IResolveConstraint)Is.EqualTo(expectedGetFirstSquareIndex)
                    : Throws.InvalidOperationException);
        }