public void GameResetTest()
        {
            //Arrange
            var factory      = new MatrixFactory();
            var tileFactory  = new TileFactory();
            var playerMatrix = factory.Create(10, 10, OwnerTypeEnum.Player, tileFactory);
            var enemyMatrix  = factory.Create(10, 10, OwnerTypeEnum.Enemy, tileFactory);
            //TODO: Replace Random provider with deterministic random provider, sometimes test may fail
            var battle = new Battle(playerMatrix, enemyMatrix, new ShipRandomFiller(new RandomProvider()));

            //Act
            battle.Reset();

            //Assert

            Assert.AreEqual(battle.PlayerShips.Count(), 5);
        }
Esempio n. 2
0
        public unsafe void CantAccesMatrixPointersWhenDisposed()
        {
            var m1   = MatrixFactory.Create <float>(2, 3);
            var ptrs = new MatrixPointersBag <float>(m1);

            fixed(void *fp1 = &m1.AsColumnMajorArray()[0])
            {
                (ptrs[0].ToPointer() == fp1).ShouldBeTrue();
            }

            ptrs.Dispose();

            Trap.Exception(() => ptrs[0]).ShouldBeInstanceOf <ObjectDisposedException>();
        }
        public void MatrixCreationTest()
        {
            //arrange
            var size          = 10;
            var matrixFactory = new MatrixFactory();
            var tileFactory   = new TileFactory();
            var matrix        = matrixFactory.Create(size, size, OwnerTypeEnum.Enemy, tileFactory);

            //act

            //assert

            Assert.AreEqual(matrix.SizeX, 10);
            Assert.AreEqual(matrix.SizeY, 10);
        }
Esempio n. 4
0
        public void CrossEntropyBackpropagationsAreEqual()
        {
            var m1           = MatrixFactory.RandomMatrix <float>(100, 100, 1e-5f, 1.0f);
            var m2           = MatrixFactory.RandomMatrix <float>(100, 100, 1e-5f, 1.0f);
            var remoteResult = MatrixFactory.Create <float>(100, 100);

            Matrix <float> local;

            using (var matrixPtrs = new MatrixPointersBag <float>(true, m1.CloneMatrix(), m2.CloneMatrix(), remoteResult))
            {
                local = MathProvider.BackPropagateCrossEntropyError(m1, m2);
                Interface.TestCrossEntropyBackprop(matrixPtrs.Definitions[0], matrixPtrs.Definitions[1], matrixPtrs.Definitions[2]);
            }

            remoteResult.ShouldMatrixEqualWithinError(local);
        }
Esempio n. 5
0
        public void CanCalculateCrossEntropyError()
        {
            var output = MatrixFactory.Create <T>(2, 2, 1.0f, 2.0f, 3.0f, 4.0f /*, 5.0f, 6.0f, 7.0f, 8.0f*/);
            var target = MatrixFactory.Create <T>(2, 2, 8.0f, 7.0f, 6.0f, 5.0f /*, 4.0f, 3.0f, 2.0f, 1.0f*/);

            _output.WriteLine($"Output\n{output.ToMatrixString()}");
            _output.WriteLine($"Target\n{target.ToMatrixString()}");

            double err = MathProvider.CrossEntropyError(output, target);
            double num = ((-(Math.Log(1.0f) * 8.0f) / 2) +
                          (-(Math.Log(2.0f) * 7.0f) / 2) +
                          (-(Math.Log(3.0f) * 6.0f) / 2) +
                          (-(Math.Log(4.0f) * 5.0f) / 2));

            err.ShouldEqualWithinError(num);

            _output.WriteLine($"Result: {err}");
        }
        public void MatrixFieldTest()
        {
            //arrange
            var size          = 10;
            var matrixFactory = new MatrixFactory();
            var tileFactory   = new TileFactory();
            var matrix        = matrixFactory.Create(size, size, OwnerTypeEnum.Enemy, tileFactory);

            //act
            var coordX = 2;
            var coordY = 2;
            var tile   = matrix.GetTile(new Coordinate(coordX, coordY));

            //assert

            Assert.NotNull(tile);
            Assert.AreEqual(tile.Coordinate.X, coordX);
            Assert.AreEqual(tile.Coordinate.Y, coordY);
        }
Esempio n. 7
0
        public TrainingSequence <float> GetNextSamples(int count)
        {
            var tuples = Enumerable.Range(0, count)
                         .Select(x =>
            {
                int a, b;
                if (_rand)
                {
                    a = SafeRandom.Generator.Next(2);
                    b = SafeRandom.Generator.Next(2);
                }
                else
                {
                    a = cnt & 0x01;
                    b = (cnt & 0x02) >> 1;
                }
                cnt++;
                return(new Tuple <int, int, int>(a, b, a ^ b));
            }).ToList();

            return(new TrainingSequence <float>(tuples.Select(x => MatrixFactory.Create <float>(2, 1, x.Item1, x.Item2)).ToList(), tuples.Select(x => MatrixFactory.Create <float>(1, 1, x.Item3)).ToList()));
        }
Esempio n. 8
0
        public unsafe void CanPinMatrixPointers()
        {
            var m1 = MatrixFactory.Create <float>(2, 3);
            var m2 = MatrixFactory.Create <float>(2, 3);

            var ptrs = new MatrixPointersBag <float>(m1, m2);
            var p1   = ptrs[0];
            var p2   = ptrs[1];

            GC.Collect();

            ptrs[0].ShouldEqual(p1);
            ptrs[1].ShouldEqual(p2);

            fixed(void *fp1 = &m1.AsColumnMajorArray()[0], fp2 = &m2.AsColumnMajorArray()[0])
            {
                (p1.ToPointer() == fp1).ShouldBeTrue();
                (p2.ToPointer() == fp2).ShouldBeTrue();
            }

            ptrs.Dispose();
        }