public async Task Winner_Score_Is_Total_Score()
        {
            var strategyRepository   = new StrategyRepository(connection);
            var strategyService      = new StrategyService(strategyRepository);
            var simulationRepository = new SimulationRepository(connection);
            var gameService          = new GameService(strategyService, gameSettingsProvider);
            var populationService    = new PopulationService(gameService);
            //TODO: simplify /\
            var simulationServce = new SimulationService(simulationRepository, populationService,
                                                         strategyService, new SimulationSettingsProvider());
            Strategy cooperator = await strategyRepository
                                  .GetByNameAsync(NoMemoryStrategies.GetSimpleCooperator().Name);

            var players = new List <Player>();

            for (int i = 0; i < 10; i++)
            {
                players.Add(new Player()
                {
                    StrategyId = cooperator.Id
                });
            }

            Simulation simulation = await simulationServce.Run(players);

            GameSettings gameSettings = gameSettingsProvider.GetGameSettings();
            int          totalScore   = gameSettings.TotalRounds
                                        * (gameSettings.CooperateModifier + gameSettings.MoveModifier)
                                        * (players.Count - 1);

            Assert.AreEqual(totalScore, simulation.Winner.Score);
        }
        public async Task Get_Cooperator_Players_Strategies()
        {
            var strategyRepository   = new StrategyRepository(connection);
            var strategyService      = new StrategyService(strategyRepository);
            var simulationRepository = new SimulationRepository(connection);
            var gameService          = new GameService(strategyService, gameSettingsProvider);
            var populationService    = new PopulationService(gameService);
            //TODO: simplify /\
            var simulationServce = new SimulationService(simulationRepository, populationService,
                                                         strategyService, new SimulationSettingsProvider());
            Strategy cooperator = await strategyRepository
                                  .GetByNameAsync(NoMemoryStrategies.GetSimpleCooperator().Name);

            var players = new List <Player>();

            for (int i = 0; i < 10; i++)
            {
                players.Add(new Player()
                {
                    StrategyId = cooperator.Id
                });
            }
            players = simulationServce.GetPlayersStrategies(players);

            bool badPlayers = players.Where(p => p.StrategyId != cooperator.Id).Any();

            Assert.IsFalse(badPlayers);
        }
        public async Task Run_Once_When_Consistent()
        {
            var strategyRepository   = new StrategyRepository(connection);
            var strategyService      = new StrategyService(strategyRepository);
            var simulationRepository = new SimulationRepository(connection);
            var gameService          = new GameService(strategyService, gameSettingsProvider);
            var populationService    = new PopulationService(gameService);
            //TODO: simplify /\
            var simulationServce = new SimulationService(simulationRepository, populationService,
                                                         strategyService, new SimulationSettingsProvider());
            Strategy cooperator = await strategyRepository
                                  .GetByNameAsync(NoMemoryStrategies.GetSimpleCooperator().Name);

            var players = new List <Player>();

            for (int i = 0; i < 10; i++)
            {
                players.Add(new Player()
                {
                    StrategyId = cooperator.Id
                });
            }

            Simulation simulation = await simulationServce.Run(players);

            Assert.IsNotNull(simulation.Winner);
            Assert.AreEqual(1, simulation.PopulationsCompleated);
        }
Exemple #4
0
 public void GetWithNull_Expected_ThrowsNullArgumentException()
 {
     lock (l)
     {
         SimulationRepository thisInstance = _testInstance;
         thisInstance.Get(null, true);
     }
 }
Exemple #5
0
 public void SaveWithNullItem_Expected_NoOperationPerformed()
 {
     lock (l)
     {
         SimulationRepository thisInstance = _testInstance;
         var expected = thisInstance.Count;
         thisInstance.Save(null);
         Assert.AreEqual(expected, thisInstance.Count);
     }
 }
Exemple #6
0
 public void SaveWithExistingItem_Expected_ItemCountIsSame()
 {
     lock (l)
     {
         SimulationRepository thisInstance = _testInstance;
         var expected = thisInstance.Count;
         thisInstance.Save(_testResult);
         Assert.AreEqual(expected, thisInstance.Count);
     }
 }
 public static void MyClassInitialize(TestContext testContext)
 {
     Directory.SetCurrentDirectory(testContext.TestDir);
     _testInstance = SimulationRepository.Instance;
     _testResult = new SimulationResult
     {
         Key = CreateKey(),
         Value = Dev2BinaryDataListFactory.CreateDataList()
     };
     _testInstance.Save(_testResult);
 }
Exemple #8
0
 public static void MyClassInitialize(TestContext testContext)
 {
     Directory.SetCurrentDirectory(testContext.TestDir);
     _testInstance = SimulationRepository.Instance;
     _testResult   = new SimulationResult
     {
         Key   = CreateKey(),
         Value = Dev2BinaryDataListFactory.CreateDataList()
     };
     _testInstance.Save(_testResult);
 }
Exemple #9
0
 public void SaveWithNewItem_Expected_ItemCountIncreasesByOne()
 {
     lock (l)
     {
         SimulationRepository thisInstance = _testInstance;
         var expected = thisInstance.Count + 1;
         var item     = CreateResult(CreateKey());
         thisInstance.Save(item);
         Assert.AreEqual(expected, thisInstance.Count);
     }
 }
        public async Task Get_New_Simulation_Id()
        {
            var simulationRepository = new SimulationRepository(connection);
            var simulation           = new Simulation()
            {
                StartDate        = DateTime.Now,
                PopulationsLimit = 10,
                EntryPlayers     = new List <Player>(),
                Populations      = new List <Population>()
            };
            string id = await simulationRepository.SaveAsync(simulation);

            Assert.IsFalse(String.IsNullOrEmpty(id));
        }
Exemple #11
0
 public void DeleteWithInvalidItem_Expected_ItemCountIsSame()
 {
     lock (l)
     {
         SimulationRepository thisInstance = _testInstance;
         int               expected        = thisInstance.Count;
         ISimulationKey    theKey          = CreateKey();
         ISimulationResult item            = CreateResult(theKey);
         string            id1             = theKey.ActivityID;
         string            id2             = theKey.ScenarioID;
         string            id3             = theKey.WorkflowID;
         Assert.AreEqual(expected, thisInstance.Count, "Fail 1");
         thisInstance.Delete(item); // Problem over here!
         Assert.AreEqual(expected, thisInstance.Count, "Fail 2");
     }
 }
        public async Task Update_Simulation()
        {
            //TODO: add GetAsync to test this
            var simulationRepository = new SimulationRepository(connection);
            var simulation           = new Simulation()
            {
                StartDate        = DateTime.Now,
                PopulationsLimit = 10,
                EntryPlayers     = new List <Player>(),
                Populations      = new List <Population>()
            };
            string id = await simulationRepository.SaveAsync(simulation);

            simulation.FinishDate            = DateTime.Now;
            simulation.PopulationsCompleated = 10;
            await simulationRepository.UpdateAsync(simulation);

            Simulation updatedSimulation = await simulationRepository.GetAsync(id);

            Assert.IsFalse(String.IsNullOrEmpty(updatedSimulation.FinishDate.ToString()));
        }
Exemple #13
0
        public void VerifySimulatedData(MasterDBContext dbContext, DataGeneratorContext dbGeneratorCtx,
                                        ResultContext dbResultCtx, int simNumber)
        {
            var simulation = SimulationRepository.GetSimulationById(simNumber, dbGeneratorCtx);

            if (simulation != null)
            {
                var approach = ApproachRepository.GetApproachById(dbGeneratorCtx, simulation.ApproachId);
                if (approach.TransitionMatrixInput.ExtendedTransitionMatrix)
                {
                    var generator = new MainGenerator();
                    generator.StartGeneration(approach, dbContext, dbResultCtx);

                    var articleCount =
                        ArticleRepository.GetArticleNamesAndCountForEachUsedArticleInSimulation(dbResultCtx, simNumber);

                    var articlesByNames =
                        ArticleRepository.GetArticlesByNames(articleCount.Keys.ToHashSet(), dbContext);
                    var capabilities = ResourceCapabilityRepository.GetParentResourceCapabilities(dbContext);

                    var actualTransitionMatrix = new TransitionMatrix
                    {
                        Pi = new double[capabilities.Count + 1, capabilities.Count + 1]
                    };

                    var capPosByCapId = new Dictionary <int, int>();
                    foreach (var cap in capabilities)
                    {
                        var number = cap.Name.Substring(0, cap.Name.IndexOf(" "));
                        var pos    = AlphabeticNumbering.GetNumericRepresentation(number);
                        capPosByCapId.Add(cap.Id, pos);
                    }

                    foreach (var a in articlesByNames)
                    {
                        var operations = a.Value.Operations.ToList();
                        operations.Sort((o1, o2) => o1.HierarchyNumber.CompareTo(o2.HierarchyNumber));

                        var operationCount = 0;
                        var lastCapPos     = 0;
                        do
                        {
                            var capPos =
                                capPosByCapId[
                                    operations[operationCount].ResourceCapability.ParentResourceCapability.Id];
                            actualTransitionMatrix.Pi[lastCapPos, capPos] += articleCount[a.Key];
                            lastCapPos = capPos + 1;
                            operationCount++;
                        } while (operationCount < operations.Count);

                        actualTransitionMatrix.Pi[lastCapPos, capabilities.Count] += articleCount[a.Key];
                    }

                    for (var i = 0; i <= capabilities.Count; i++)
                    {
                        var sum = 0.0;
                        for (var j = 0; j <= capabilities.Count; j++)
                        {
                            sum += actualTransitionMatrix.Pi[i, j];
                        }

                        for (var j = 0; j <= capabilities.Count; j++)
                        {
                            actualTransitionMatrix.Pi[i, j] /= sum;
                        }
                    }

                    var transitionMatrixGenerator = new TransitionMatrixGenerator();
                    ActualOrganizationDegree = transitionMatrixGenerator.CalcOrganizationDegree(
                        actualTransitionMatrix.Pi,
                        capabilities.Count + 1);
                    GeneratedOrganizationDegree = transitionMatrixGenerator.CalcOrganizationDegree(
                        generator.TransitionMatrix.Pi,
                        capabilities.Count + 1);

                    System.Diagnostics.Debug.WriteLine("################################# Executed work plans have an organization degree of " + ActualOrganizationDegree + " (transition matrix has " + GeneratedOrganizationDegree + "; input was " + approach.TransitionMatrixInput.DegreeOfOrganization + ")");
                }
            }
        }