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); }