Пример #1
0
        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));
            }
        }
Пример #2
0
        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));
        }
Пример #3
0
        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);
        }