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