public void GameLogicTest(IInfo info, IBoard board, IRandomTest rnd) { this.info = info; this.board = board; this.rnd = rnd; randomOption = RandomOption.Testing; }
public void Test_WakeUp() { IInfo info = A.Fake <IInfo>(); IBoard board = A.Fake <IBoard>(); IRandomTest rnd = A.Fake <IRandomTest>(); GameLogic gameLogic = new GameLogic(); gameLogic.GameLogicTest(info, board, rnd); List <IDynamicObject> l = new List <IDynamicObject>(); int count = 10; for (int i = 0; i < count; i++) { var obj = A.Fake <IDynamicObject>(); A.CallTo(() => obj.SleepCount).Returns(1); l.Add(obj); } A.CallTo(() => board.GetAlive()).ReturnsLazily(() => l); gameLogic.WakeUp(); foreach (var obj in l) { A.CallTo(() => obj.WakeUp()).MustHaveHappenedOnceExactly(); } }
public void Test_GenerateInitialObjects() { IInfo info = A.Fake <IInfo>(); IBoard board = A.Fake <IBoard>(); IRandomTest rnd = A.Fake <IRandomTest>(); IGameLogic gameLogic = new GameLogic(); gameLogic.GameLogicTest(info, board, rnd); List <IDynamicObject> l = new List <IDynamicObject>(); int count = 10; A.CallTo(() => info.Length).Returns(5); A.CallTo(() => info.Hight).Returns(5); A.CallTo(() => info.NumberOfObjects).Returns(count); for (int i = 0; i < count; i++) { var obj = A.Fake <IDynamicObject>(); A.CallTo(() => obj.Id).ReturnsLazily(() => i); l.Add(obj); } A.CallTo(() => board.GenerateInitialObjects(count)).ReturnsLazily(() => l); A.CallTo(() => board.GetAlive()).ReturnsLazily(() => l); gameLogic.GenerateInitialObjects(); Assert.AreEqual(count, gameLogic.GetNumberOfAliveObjects()); }
public void Test_TryMove_Both_Should_Fail() { IInfo info = A.Fake <IInfo>(); IRandomTest rnd = A.Fake <IRandomTest>(); IProducerConsumerMessages <string> producerConsumer = A.Fake <IProducerConsumerMessages <string> >(); int length = 4; int hight = 4; int[] values = new int[50]; ITile[,] tiles = new ITile[length, hight]; for (int i = 0; i < length; i++) { for (int j = 0; j < hight; j++) { ITile tile = A.Fake <ITile>(); tiles[i, j] = tile; tile.DynamicObject = null; ReaderWriterLockSlim readerWriterLock = new ReaderWriterLockSlim(); A.CallTo(() => tile.Lock).ReturnsLazily(() => readerWriterLock); } } var positions = new List <(int, int)> { (0, 0), (1, 1) }; foreach (var t in positions) { int x = t.Item1; int y = t.Item2; IDynamicObject fakeObj = A.Fake <IDynamicObject>(); A.CallTo(() => fakeObj.X).ReturnsLazily(() => x); A.CallTo(() => fakeObj.Y).ReturnsLazily(() => y); A.CallTo(() => tiles[x, y].DynamicObject).ReturnsLazily(() => fakeObj); A.CallTo(() => tiles[x, y].StaticObject).Returns(null); } A.CallTo(() => info.Length).Returns(length); A.CallTo(() => info.Hight).Returns(hight); IBoard board = new Board(); board.TestBoard(tiles, info, rnd, producerConsumer); //act bool ans1 = false, ans2 = false; Thread t1 = new Thread(() => ans1 = board.TryToMove(tiles[0, 0].DynamicObject.X, tiles[0, 0].DynamicObject.Y, 1, 1)); Thread t2 = new Thread(() => ans2 = board.TryToMove(tiles[1, 1].DynamicObject.X, tiles[1, 1].DynamicObject.Y, 0, 0)); t1.Start(); t2.Start(); t1.Join(); t2.Join(); //Assert, both sould fail Assert.AreEqual(false, ans1); Assert.AreEqual(false, ans2); }
public void Test_GenetareFood() { //initialize IInfo info = A.Fake <IInfo>(); IRandomTest rnd = A.Fake <IRandomTest>(); IProducerConsumerMessages <string> producerConsumer = A.Fake <IProducerConsumerMessages <string> >(); int count = 0; int[] values = new int[50]; Tile[,] tiles = new Tile[5, 5]; A.CallTo(() => info.Length).Returns(5); A.CallTo(() => info.Hight).Returns(5); A.CallTo(() => info.ID).Returns(0); A.CallTo(() => producerConsumer.Produce(A <string> .Ignored)); A.CallTo(() => rnd.Next(A <int> .Ignored, A <int> .Ignored)).ReturnsNextFromSequence(values); A.CallTo(() => info.FoodPerDay).Returns(10); for (int i = 0; i < info.Length; i++) { for (int j = 0; j < info.Hight; j++) { if (count < 50) { values[count] = i; count++; values[count] = j; count++; } tiles[i, j] = new Tile(); } } IBoard board = new Board(); board.TestBoard(tiles, info, rnd, producerConsumer); board.GenetareFood(); count = 0; for (int i = 0; i < info.Length; i++) { for (int j = 0; j < info.Hight; j++) { if (tiles[i, j].StaticObject != null) { count++; } } } bool ans = count <= 10 && count >= 1; Assert.AreEqual(true, ans); }
public void Test_UpdateStatusAll() { IInfo info = A.Fake <IInfo>(); IRandomTest rnd = A.Fake <IRandomTest>(); IBoard board = A.Fake <IBoard>(); int[] values = new int[50]; ITile[,] tiles = new ITile[3, 3]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { ITile tile = A.Fake <ITile>(); tiles[i, j] = tile; } } var positions = new List <(int, int)> { (0, 0), (1, 0), (2, 1) }; var objects = new List <IDynamicObject>(); foreach (var t in positions) { int x = t.Item1; int y = t.Item2; IDynamicObject fakeObj = A.Fake <IDynamicObject>(); A.CallTo(() => fakeObj.X).ReturnsLazily(() => x); A.CallTo(() => fakeObj.Y).ReturnsLazily(() => y); A.CallTo(() => fakeObj.Strength).Returns(2); objects.Add(fakeObj); } var obj = A.Fake <IDynamicObject>(); int strength = 1; A.CallTo(() => obj.Strength).ReturnsLazily(() => strength); A.CallTo(() => obj.X).Returns(2); A.CallTo(() => obj.Y).Returns(2); A.CallTo(() => obj.AddStrength(-1)).Invokes(() => strength--); objects.Add(obj); A.CallTo(() => info.Length).Returns(3); A.CallTo(() => info.Hight).Returns(3); A.CallTo(() => info.ObjectStrengthDecay).Returns(1); A.CallTo(() => board.GetAlive()).Returns(objects); var gameLogic = new GameLogic(); gameLogic.GameLogicTest(info, board, rnd); gameLogic.UpdateAlive(); A.CallTo(() => obj.SetState(State.Dead)).MustHaveHappened(); }
public void Test_GenerateInitialObjects() { //initialize IInfo info = A.Fake <IInfo>(); IRandomTest rnd = A.Fake <IRandomTest>(); IProducerConsumerMessages <string> producerConsumer = A.Fake <IProducerConsumerMessages <string> >(); int count = 0; int[] values = new int[50]; Tile[,] tiles = new Tile[5, 5]; int id = 0; A.CallTo(() => info.Length).Returns(5); A.CallTo(() => info.Hight).Returns(5); A.CallTo(() => info.ObjectStartStrengthHigh).Returns(2); A.CallTo(() => info.ObjectStartStrengthLow).Returns(1); A.CallTo(() => info.ID).ReturnsLazily(() => { int val = count; count++; return(val); }); A.CallTo(() => producerConsumer.Produce(A <string> .Ignored)); for (int i = 0; i < info.Length; i++) { for (int j = 0; j < info.Hight; j++) { if (count < 50) { values[count] = i; count++; values[count] = j; count++; } tiles[i, j] = new Tile(); } } A.CallTo(() => rnd.Next(A <int> .Ignored, A <int> .Ignored)).ReturnsNextFromSequence(values); IBoard board = new Board(); board.TestBoard(tiles, info, rnd, producerConsumer); board.GenerateInitialObjects(10); //assert count = 0; for (int i = 0; i < info.Length; i++) { for (int j = 0; j < info.Hight; j++) { if (tiles[i, j].DynamicObject != null) { count++; } } } Assert.AreEqual(10, count); }
//for testing purposes public void TestBoard(ITile[,] tiles, IInfo info, IRandomTest rnd, IProducerConsumerMessages <string> producerConsumer) { this.info = info; this.tiles = tiles; this.rnd = rnd; randomOption = RandomOption.Testing; this.producerConsumer = producerConsumer; aliveObjects = new Dictionary <int, IDynamicObject>(); ReadFolder(); }
public void Test_GenerateFood() { IInfo info = A.Fake <IInfo>(); IBoard board = A.Fake <IBoard>(); IRandomTest rnd = A.Fake <IRandomTest>(); GameLogic gameLogic = new GameLogic(); gameLogic.GameLogicTest(info, board, rnd); gameLogic.GenerateFood(); A.CallTo(() => board.GenetareFood()).MustHaveHappenedOnceExactly(); }
public void Test_TryToMove() { IInfo info = A.Fake <IInfo>(); IBoardFunctions board = A.Fake <IBoardFunctions>(); IRandomTest rnd = A.Fake <IRandomTest>(); IDynamicObject ant = new Ant(info, rnd) { X = 0, Y = 0, Agility = 1, BoardFunctions = board }; A.CallTo(() => rnd.Next(A <int> .Ignored, A <int> .Ignored)).Returns(1); //gameLogic.ActAliveObject(dynamicObject); ant.TryToMove(); A.CallTo(() => board.TryToMove(0, 0, 1, 1)).MustHaveHappened(); }
public void Test_Fight_With_Other_Should_Lose() { //initialize IInfo info = A.Fake <IInfo>(); IRandomTest rnd = A.Fake <IRandomTest>(); var ant = new Ant(info, rnd); var producerConsumer = A.Fake <IProducerConsumerMessages <string> >(); ant.ProducerConsumer = producerConsumer; var other = A.Fake <IDynamicObject>(); A.CallTo(() => other.Strength).ReturnsLazily(() => 4); A.CallToSet(() => other.Strength).To(6); //act ant.Fight(other); //assert A.CallTo(() => other.AddStrength(2)).MustHaveHappened(); Assert.AreEqual(State.Depressed, ant.State); }
public void Test_ActDepressed() { //initialize IBoardFunctions board = A.Fake <IBoardFunctions>(); IInfo info = A.Fake <IInfo>(); IProducerConsumerMessages <string> pc = A.Fake <IProducerConsumerMessages <string> >(); IRandomTest rnd = A.Fake <IRandomTest>(); IDynamicObject ant = new Ant(info, rnd) { BoardFunctions = board, X = 1, Y = 1, ProducerConsumer = pc }; List <IDynamicObject> l = new List <IDynamicObject>(); var positions = new List <(int, int)> { (0, 0), (1, 0), (2, 1) }; foreach (var p in positions) { var obj = A.Fake <IDynamicObject>(); A.CallTo(() => obj.X).ReturnsLazily(() => p.Item1); A.CallTo(() => obj.Y).ReturnsLazily(() => p.Item2); A.CallTo(() => obj.State).Returns(State.Alive); l.Add(obj); } var dynamicObject = A.Fake <IDynamicObject>(); A.CallTo(() => board.GetNearObjects(ant.X, ant.Y, 1)).Returns(l); A.CallTo(() => info.MaxObjectsPerArea).Returns(3); A.CallTo(() => info.MinObjectsPerArea).Returns(1); //act ant.SetState(State.Depressed); ant.Action(); //assert Assert.AreEqual(State.Alive, ant.State); }
public void Test_GetNearObjects() { //initialize IInfo info = A.Fake <IInfo>(); IRandomTest rnd = A.Fake <IRandomTest>(); IProducerConsumerMessages <string> producerConsumer = A.Fake <IProducerConsumerMessages <string> >(); int[] values = new int[50]; ITile[,] tiles = new ITile[4, 4]; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { ITile tile = A.Fake <ITile>(); tiles[i, j] = tile; tile.DynamicObject = null; ReaderWriterLockSlim readerWriterLock = new ReaderWriterLockSlim(); A.CallTo(() => tile.Lock).ReturnsLazily(() => readerWriterLock); } } var positions = new List <(int, int)> { (0, 0), (1, 0), (2, 1), (3, 3) }; foreach (var t in positions) { int x = t.Item1; int y = t.Item2; IDynamicObject fakeObj = A.Fake <IDynamicObject>(); A.CallTo(() => fakeObj.X).ReturnsLazily(() => x); A.CallTo(() => fakeObj.Y).ReturnsLazily(() => y); A.CallTo(() => fakeObj.Strength).Returns(2); A.CallTo(() => tiles[x, y].DynamicObject).ReturnsLazily(() => fakeObj); } var obj = A.Fake <IDynamicObject>(); A.CallTo(() => obj.X).Returns(1); A.CallTo(() => obj.Y).Returns(1); A.CallTo(() => tiles[1, 1].DynamicObject).ReturnsLazily(() => obj); A.CallTo(() => info.Length).Returns(4); A.CallTo(() => info.Hight).Returns(4); AutoResetEvent autoResetEvent = new AutoResetEvent(false); IBoard board = new Board(); board.TestBoard(tiles, info, rnd, producerConsumer); //act Thread thr1 = new Thread(() => { tiles[2, 1].Lock.EnterWriteLock(); autoResetEvent.Set(); Thread.Sleep(100); tiles[2, 1].Lock.ExitWriteLock(); }); thr1.Start(); autoResetEvent.WaitOne(); List <IDynamicObject> l = board.GetNearObjects(obj.X, obj.Y, 1); //assert Assert.AreEqual(3, l.Count); }
public Ant(IInfo info, IRandomTest rnd) : base() { this.rnd = rnd; this.info = info; }
private static string RunPerftest(IRandomTest svc) { var sw = new Stopwatch(); sw.Start(); var results = new List<double>(); for (int j = 0; j < _iterations; j++) { var isw = new Stopwatch(); isw.Start(); for (int l = 0; l < _batches; l++) { var tasks = new List<Task>(); for (int i = 0; i < _numberThreads; i++) { tasks.Add(Task.Factory.StartNew(() => { svc.Random(new SomeObject()); })); } Task.WaitAll(tasks.ToArray()); } isw.Stop(); results.Add(isw.ElapsedMilliseconds); } sw.Stop(); var content = svc.GetType().FullName + "\r\n" + svc.Name + "\r\n" + string.Join("\r\n", results) + "\r\n\r\nTotal:\t\t" + sw.ElapsedMilliseconds + "\r\n\r\nAverage:\t" + results.Average() + "\r\n\r\n"; return content; }
private ActionResult Perftest(IRandomTest svc) { return Content(RunPerftest(svc), "text/plain"); }
public void Test_TryCreate() { //initialize IInfo info = A.Fake <IInfo>(); IRandomTest rnd = A.Fake <IRandomTest>(); IProducerConsumerMessages <string> producerConsumer = A.Fake <IProducerConsumerMessages <string> >(); int length = 4; int hight = 4; int[] values = new int[50]; ITile[,] tiles = new ITile[length, hight]; for (int i = 0; i < length; i++) { for (int j = 0; j < hight; j++) { ITile tile = A.Fake <ITile>(); tiles[i, j] = tile; tile.DynamicObject = null; ReaderWriterLockSlim readerWriterLock = new ReaderWriterLockSlim(); A.CallTo(() => tile.Lock).ReturnsLazily(() => readerWriterLock); } } var positions = new List <(int, int)> { (0, 0) }; foreach (var t in positions) { int x = t.Item1; int y = t.Item2; IDynamicObject fakeObj = A.Fake <IDynamicObject>(); A.CallTo(() => fakeObj.X).ReturnsLazily(() => x); A.CallTo(() => fakeObj.Y).ReturnsLazily(() => y); A.CallTo(() => fakeObj.Strength).Returns(2); A.CallTo(() => tiles[x, y].DynamicObject).ReturnsLazily(() => fakeObj); } A.CallTo(() => info.Length).Returns(length); A.CallTo(() => info.Hight).Returns(hight); IBoard board = new Board(); board.TestBoard(tiles, info, rnd, producerConsumer); //act bool ans1 = false, ans2 = false; Thread t1 = new Thread(() => ans1 = board.TryCreate(1, 2) == null); Thread t2 = new Thread(() => ans2 = board.TryCreate(2, 2) == null); t1.Start(); t2.Start(); t1.Join(); t2.Join(); //Assert, only one object should be created Assert.AreEqual(true, ans1 ^ ans2); }