コード例 #1
0
 public void GameLogicTest(IInfo info, IBoard board, IRandomTest rnd)
 {
     this.info    = info;
     this.board   = board;
     this.rnd     = rnd;
     randomOption = RandomOption.Testing;
 }
コード例 #2
0
ファイル: LogicUnitTests.cs プロジェクト: YarinNahum/AntFarm
        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();
            }
        }
コード例 #3
0
ファイル: LogicUnitTests.cs プロジェクト: YarinNahum/AntFarm
        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());
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: LogicUnitTests.cs プロジェクト: YarinNahum/AntFarm
        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();
        }
コード例 #7
0
        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);
        }
コード例 #8
0
 //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();
 }
コード例 #9
0
ファイル: LogicUnitTests.cs プロジェクト: YarinNahum/AntFarm
        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();
        }
コード例 #10
0
ファイル: AntUnitTests.cs プロジェクト: YarinNahum/AntFarm
        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();
        }
コード例 #11
0
ファイル: AntUnitTests.cs プロジェクト: YarinNahum/AntFarm
        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);
        }
コード例 #12
0
ファイル: AntUnitTests.cs プロジェクト: YarinNahum/AntFarm
        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);
        }
コード例 #13
0
        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);
        }
コード例 #14
0
 public Ant(IInfo info, IRandomTest rnd) : base()
 {
     this.rnd  = rnd;
     this.info = info;
 }
コード例 #15
0
        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;
        }
コード例 #16
0
 private ActionResult Perftest(IRandomTest svc)
 {
     return Content(RunPerftest(svc), "text/plain");
 }
コード例 #17
0
        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);
        }