public void AddMultipleCharactersThenClear()
        {
            var fakeStaticWrapper = A.Fake <IStaticWrapper>();

            A.CallTo(fakeStaticWrapper).WithReturnType <ContributionDefinition>()
            .Returns(new ContributionDefinition {
                ContributionValue = 1, ContributionId = 1
            });

            var contributionManager = new ContributionManager(
                new ConcurrentDictionary <uint, List <PlayerContribution> >(),
                ContributionFactorReferenceList);

            contributionManager.UpdateContribution(100, 1);
            contributionManager.UpdateContribution(102, 2);
            contributionManager.UpdateContribution(104, 2);
            contributionManager.UpdateContribution(104, 1);

            contributionManager.RemoveCharacter(102);
            var result = contributionManager.GetContributionValue(102);

            Assert.IsTrue(result == 0);

            contributionManager.Clear();
            var result2 = contributionManager.GetContributionValue(102);

            Assert.IsTrue(result2 == 0);
            var result3 = contributionManager.GetContributionValue(104);

            Assert.IsTrue(result3 == 0);
        }
        public void UpdateCharacterNoAdd()
        {
            var contributionManager = new ContributionManager(new ConcurrentDictionary <uint, List <PlayerContribution> >(), ContributionFactorReferenceList);

            contributionManager.UpdateContribution(100, 1);
            contributionManager.UpdateContribution(100, 2);
            contributionManager.UpdateContribution(100, 2);
            contributionManager.UpdateContribution(100, 1);

            var result = contributionManager.GetContributionValue(100);

            Assert.IsTrue(result == 8);
        }
        public void RemoveCharacterFromNotEmptyWrongId()
        {
            var contributionManager = new ContributionManager(new ConcurrentDictionary <uint, List <PlayerContribution> >(), ContributionFactorReferenceList);

            contributionManager.AddCharacter(100);
            Assert.IsFalse(contributionManager.RemoveCharacter(101));

            contributionManager.UpdateContribution(100, 1);
            var result = contributionManager.GetContributionValue(100);

            Assert.IsTrue(result == 1);

            Assert.IsTrue(contributionManager.RemoveCharacter(100));


            contributionManager.UpdateContribution(100, 1);
            var result2 = contributionManager.GetContributionValue(100);

            Assert.IsTrue(result2 == 1);
        }
        public void AddNewPlayerAddContribution()
        {
            var contributionManager = new ContributionManager(new ConcurrentDictionary <uint, List <PlayerContribution> >(), ContributionFactorReferenceList);

            contributionManager.AddCharacter(100);
            contributionManager.UpdateContribution(100, 1);
            var result = contributionManager.GetContributionValue(100);

            Assert.IsTrue(result == 1);

            contributionManager.UpdateContribution(100, 1);
            var result2 = contributionManager.GetContributionValue(100);

            Assert.IsTrue(result2 == 2);

            // Has a value of 3
            contributionManager.UpdateContribution(100, 2);
            var result3 = contributionManager.GetContributionValue(100);

            Assert.IsTrue(result3 == 5);
        }
        public void TimingOnLargeSetUpdates()
        {
            var contributionManager = new ContributionManager(new ConcurrentDictionary <uint, List <PlayerContribution> >(), ContributionFactorReferenceList);

            contributionManager.UpdateContribution(100, 1);
            contributionManager.UpdateContribution(102, 2);
            Stopwatch sw = new Stopwatch();

            sw.Start();
            var result2 = contributionManager.GetContributionValue(102);

            Assert.IsTrue(result2 == 3);
            sw.Stop();

            contributionManager.UpdateContribution(104, 2);
            contributionManager.UpdateContribution(104, 1);
            for (uint i = 0; i < 2000; i++)
            {
                contributionManager.UpdateContribution(i + 200, 1);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 1);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 1);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 1);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 1);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 1);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
                contributionManager.UpdateContribution(i + 200, 2);
            }

            var result = contributionManager.GetContributionValue(102);

            Assert.IsTrue(result == 3);
            sw.Start();
            var result4 = contributionManager.GetContributionValue(200);

            sw.Stop();
            var elapsed = sw.ElapsedMilliseconds;
        }