Exemple #1
0
        public void AdvancedLadderProcessIsBetterThanBasic()
        {
            var basicLadderProcess    = new BasicLadderProcess(_character, _finalImplantTemplates);
            var advancedLadderProcess = new AdvancedLadderProcess(_character, _finalImplantTemplates);

            Assert.IsTrue(basicLadderProcess.AverageFinalImplantQL < advancedLadderProcess.AverageFinalImplantQL);
        }
Exemple #2
0
        public void BasicLadderIsFastWhenMaxNumberOfLadderImplantsButVeryHighStartingStats()
        {
            _character = new Character(
                agilityValue: 500, intelligenceValue: 500, psychicValue: 500,
                senseValue: 500, staminaValue: 500, strengthValue: 500, treatmentValue: 1000);

            _finalImplantTemplates = new[]
            {
                ImplantTemplate.GetImplantTemplate(ImplantSlot.Head, Skill.TimeAndSpace, Skill.NanoPool, Ability.Sense),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.Eye, Skill.AimedShot, Skill.Treatment, Skill.TimeAndSpace),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.Ear, null, Skill.Concealment, Ability.Intelligence),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.Chest, Ability.Stamina, Skill.BioMetamor, Skill.SensoryImpr),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.RightArm, Ability.Strength, null, null),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.LeftArm, null, Ability.Strength, null),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.Waist, ArmorClass.FireAC, MaxHealthOrNano.MaxHealth, Ability.Stamina),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.RightWrist, Skill.RunSpeed, Skill.NanoResist, Skill.MultMelee),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.LeftWrist, Skill.MultMelee, Skill.RunSpeed, Skill.NanoResist),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.Leg, Ability.Agility, Skill.EvadeClsC, ArmorClass.MeleeMaAC),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.RightHand, Skill.MartialArts, Skill.TimeAndSpace, Skill.Treatment),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.LeftHand, null, ArmorClass.FireAC, Skill.MartialArts),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.Feet, Skill.EvadeClsC, Ability.Agility, Skill.DuckExp),
            };
            Assert.AreEqual(10, _finalImplantTemplates.Count(t => t.RaisesLadderStats));

            var ladderProcess = new BasicLadderProcess(_character, _finalImplantTemplates);

            Assert.AreEqual(200, ladderProcess.AverageFinalImplantQL);
        }
Exemple #3
0
        public void AllLadderProcessesAreEquivalentWhenNoLadderSlotsAreAvailable()
        {
            var character = new Character(
                agilityValue: 281, intelligenceValue: 315, psychicValue: 305,
                senseValue: 213, staminaValue: 301, strengthValue: 316, treatmentValue: 662.6250);
            var finalImplantTemplates = new[]
            {
                ImplantTemplate.GetImplantTemplate(ImplantSlot.RightWrist, Skill.RunSpeed, Skill.NanoResist, Skill.MultMelee),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.LeftWrist, Skill.MultMelee, Skill.RunSpeed, Skill.NanoResist),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.LeftHand, null, ArmorClass.FireAC, Skill.MartialArts),
            };

            var degenerateLadderProcess = new DegenerateLadderProcess(character, finalImplantTemplates);
            var basicLadderProcess      = new BasicLadderProcess(character, finalImplantTemplates,
                                                                 unavailableImplantSlots: ImplantSlot.LadderImplantSlots);
            var advancedLadderProcess = new AdvancedLadderProcess(character, finalImplantTemplates,
                                                                  unavailableImplantSlots: ImplantSlot.LadderImplantSlots);

            CollectionAssert.AreEquivalent(
                degenerateLadderProcess.OrderedFinalImplants.ToArray(),
                basicLadderProcess.OrderedFinalImplants.ToArray());
            CollectionAssert.AreEquivalent(
                basicLadderProcess.OrderedFinalImplants.ToArray(),
                advancedLadderProcess.OrderedFinalImplants.ToArray());
            CollectionAssert.AreEquivalent(
                degenerateLadderProcess.OrderedLadderImplants.ToArray(),
                basicLadderProcess.OrderedLadderImplants.ToArray());
            CollectionAssert.AreEquivalent(
                basicLadderProcess.OrderedLadderImplants.ToArray(),
                advancedLadderProcess.OrderedLadderImplants.ToArray());
            Assert.AreEqual(138, degenerateLadderProcess.AverageFinalImplantQL);
            Assert.AreEqual(138, basicLadderProcess.AverageFinalImplantQL);
            Assert.AreEqual(138, advancedLadderProcess.AverageFinalImplantQL);
        }
Exemple #4
0
        public void BasicLadderProcessLeavesCharacterInOriginalState()
        {
            var ladderProcess = new BasicLadderProcess(_character, _finalImplantTemplates);

            Assert.AreEqual(0, _character.GetTotalImplantQL());
            Assert.AreEqual(662.6250, _character.TreatmentValue);
            Assert.AreEqual(281, _character.GetAbilityValue(Ability.Agility));
        }
Exemple #5
0
        public void BasicLadderProcessHandlesEmptyFinalImplantTemplates()
        {
            var ladderProcess = new BasicLadderProcess(_character, new ImplantTemplate[0]);

            Assert.AreEqual(0, ladderProcess.TotalFinalImplantQL);
            Assert.AreEqual(0, ladderProcess.AverageFinalImplantQL);
            Assert.AreEqual(0, ladderProcess.OrderedLadderImplants.Count);
            Assert.AreEqual(0, ladderProcess.OrderedFinalImplants.Count);
        }
Exemple #6
0
        public void BasicLadderUsesASingleLadderImplantIfThatsAllThatsNecessary()
        {
            _character = new Character(
                agilityValue: 410, intelligenceValue: 410, psychicValue: 410,
                senseValue: 410, staminaValue: 410, strengthValue: 410, treatmentValue: 907);

            var basicLadderProcess = new BasicLadderProcess(_character, _finalImplantTemplates);

            Assert.AreEqual(ImplantSlot.Head, basicLadderProcess.OrderedLadderImplants.Single().ImplantSlot);
            Assert.AreEqual(200, basicLadderProcess.AverageFinalImplantQL);
        }
Exemple #7
0
        public void BasicLadderProcessIsAtLeastAsGoodAsOldApplications()
        {
            // For 282 the old one seems deterministic, unlike for 281.
            _character.IncreaseAbilityValue(Ability.Agility, 1);
            Assert.AreEqual(282, _character.GetAbilityValue(Ability.Agility));

            var ladderProcess = new BasicLadderProcess(_character, _finalImplantTemplates);

            Assert.IsTrue(164.55 <= ladderProcess.AverageFinalImplantQL);
            // Throw in a regression test, hopefully won't ever drop below this.
            Assert.AreEqual(166.72727272727272, ladderProcess.AverageFinalImplantQL);
        }
Exemple #8
0
        public void BasicLadderProcessBehaviorWhenTinyCharacterStats()
        {
            _character = new Character(
                agilityValue: 1, intelligenceValue: 1, psychicValue: 1,
                senseValue: 1, staminaValue: 1, strengthValue: 1, treatmentValue: 1);

            var ladderProcess = new BasicLadderProcess(_character, _finalImplantTemplates);

            Assert.AreEqual(0, ladderProcess.TotalFinalImplantQL);
            Assert.AreEqual(0, ladderProcess.OrderedLadderImplants.Count);
            Assert.AreEqual(0, ladderProcess.OrderedFinalImplants.Count);
        }
Exemple #9
0
        public void BasicLadderProcessBehaviorWhenHugeCharacterStats()
        {
            _character = new Character(
                agilityValue: 981, intelligenceValue: 915, psychicValue: 905,
                senseValue: 913, staminaValue: 901, strengthValue: 916, treatmentValue: 962.6250);

            var ladderProcess = new BasicLadderProcess(_character, _finalImplantTemplates);

            Assert.AreEqual(0, ladderProcess.OrderedLadderImplants.Count);
            Assert.AreEqual(200, ladderProcess.AverageFinalImplantQL);
            Assert.AreEqual(200 * 11, ladderProcess.TotalFinalImplantQL);
        }
Exemple #10
0
        public void BasicLadderDoesntUseUnavailableImplantSlots()
        {
            _finalImplantTemplates = _finalImplantTemplates.Where(t => t.ImplantSlot != ImplantSlot.Head).ToArray();
            var fullLadderProcess       = new BasicLadderProcess(_character, _finalImplantTemplates);
            var restrictedLadderProcess = new BasicLadderProcess(_character, _finalImplantTemplates, new[] { ImplantSlot.Head });

            Assert.IsTrue(fullLadderProcess.OrderedLadderImplants.Any(i => i.ImplantSlot == ImplantSlot.Head));
            Assert.IsFalse(restrictedLadderProcess.OrderedLadderImplants.Any(i => i.ImplantSlot == ImplantSlot.Head));
            Assert.IsTrue(fullLadderProcess.AverageFinalImplantQL > restrictedLadderProcess.AverageFinalImplantQL);
            // Throw in a regression test, hopefully won't ever drop below this.
            Assert.AreEqual(168.6, fullLadderProcess.AverageFinalImplantQL);
            Assert.AreEqual(153.4, restrictedLadderProcess.AverageFinalImplantQL);
        }
Exemple #11
0
        public void BasicLadderUsesOneLadderImplantWhenTheresOnlyOneAvailable()
        {
            _finalImplantTemplates = new[]
            {
                ImplantTemplate.GetImplantTemplate(ImplantSlot.RightWrist, Skill.RunSpeed, Skill.NanoResist, Skill.MultMelee),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.LeftWrist, Skill.MultMelee, Skill.RunSpeed, Skill.NanoResist),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.LeftHand, null, ArmorClass.FireAC, Skill.MartialArts),
            };

            var basicLadderProcess = new BasicLadderProcess(_character, _finalImplantTemplates,
                                                            unavailableImplantSlots: ImplantSlot.LadderImplantSlots.Where(s => s != ImplantSlot.RightHand));

            Assert.AreEqual(ImplantSlot.RightHand, basicLadderProcess.OrderedLadderImplants.Single().ImplantSlot);
            Assert.IsTrue(basicLadderProcess.AverageFinalImplantQL > 138);
        }
Exemple #12
0
        public void BasicLadderProcessIsAtLeastAsGoodAsOldApplicationWhenNoInitialLimitingFactor()
        {
            // There's no limiting factor here, they have the exact stats required to equip a QL 100 left-arm.
            _character = new Character(
                agilityValue: 204, intelligenceValue: 204, psychicValue: 204,
                senseValue: 204, staminaValue: 204, strengthValue: 204, treatmentValue: 479);
            _finalImplantTemplates = new[]
            {
                ImplantTemplate.GetImplantTemplate(ImplantSlot.LeftArm, Skill.Brawling, Skill.TwoHandBlunt, ArmorClass.ChemicalAC)
            };

            var ladderProcess = new BasicLadderProcess(_character, _finalImplantTemplates);

            Assert.IsTrue(121 <= ladderProcess.AverageFinalImplantQL);
        }
Exemple #13
0
        public void BasicLadderProcessUsesAFewLadderImplantsIfThatsAllThatsAvailable()
        {
            var availableImplantSlots = new[]
            {
                ImplantSlot.Head, ImplantSlot.RightHand, ImplantSlot.Leg,
                ImplantSlot.RightWrist, ImplantSlot.LeftWrist, ImplantSlot.LeftHand
            };

            _finalImplantTemplates = _finalImplantTemplates
                                     .Where(t => availableImplantSlots.Contains(t.ImplantSlot))
                                     .ToArray();

            var basicLadderProcess = new BasicLadderProcess(_character, _finalImplantTemplates,
                                                            unavailableImplantSlots: ImplantSlot.ImplantSlots.Except(availableImplantSlots));

            Assert.IsTrue(basicLadderProcess.OrderedLadderImplants.All(i => availableImplantSlots.Contains(i.ImplantSlot)));
            Assert.IsTrue(basicLadderProcess.OrderedFinalImplants.All(i => availableImplantSlots.Contains(i.ImplantSlot)));
            // Throw in a regression test, hopefully won't ever drop below this.
            Assert.AreEqual(928, basicLadderProcess.TotalFinalImplantQL);
        }
Exemple #14
0
        public void BasicLadderProcessIsPossible()
        {
            var ladderProcess = new BasicLadderProcess(_character, _finalImplantTemplates);

            foreach (var ladderImplant in ladderProcess.OrderedLadderImplants)
            {
                Assert.IsTrue(_character.TryEquipImplant(ladderImplant));
            }

            foreach (var finalImplant in ladderProcess.OrderedFinalImplants)
            {
                Assert.IsTrue(_character.TryEquipImplant(finalImplant));
            }

            var finalImplantSlots = _finalImplantTemplates
                                    .Select(t => t.ImplantSlot)
                                    .ToArray();

            Assert.AreEqual(_character.GetTotalImplantQL(finalImplantSlots), ladderProcess.TotalFinalImplantQL);
            Assert.AreEqual(_character.GetAverageImplantQL(finalImplantSlots), ladderProcess.AverageFinalImplantQL);
        }
Exemple #15
0
        public void BasicLadderDoesntTakeForeverEvenWhenHighNumberOfFinalImplantsAsLadderImplants()
        {
            // If we try 9 or 10 ladder implants it's going take around a minute.
            _finalImplantTemplates = new[]
            {
                ImplantTemplate.GetImplantTemplate(ImplantSlot.Head, Skill.TimeAndSpace, Skill.NanoPool, Ability.Sense),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.Eye, Skill.AimedShot, Skill.SensoryImpr, Skill.TimeAndSpace),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.Ear, null, Skill.Concealment, Ability.Intelligence),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.Chest, Ability.Stamina, Skill.BioMetamor, Skill.SensoryImpr),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.RightArm, Ability.Strength, null, null),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.LeftArm, null, Ability.Strength, null),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.Waist, ArmorClass.FireAC, MaxHealthOrNano.MaxHealth, Skill.EvadeClsC),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.RightWrist, Skill.RunSpeed, Skill.NanoResist, Skill.MultMelee),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.LeftWrist, Skill.MultMelee, Skill.RunSpeed, Skill.NanoResist),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.Leg, Ability.Agility, Skill.EvadeClsC, ArmorClass.MeleeMaAC),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.RightHand, Skill.MartialArts, Skill.TimeAndSpace, Skill.Treatment),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.LeftHand, null, ArmorClass.FireAC, Skill.MartialArts),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.Feet, Skill.EvadeClsC, Ability.Agility, Skill.DuckExp),
            };
            Assert.AreEqual(8, _finalImplantTemplates.Count(t => t.RaisesLadderStats));

            var ladderProcess = new BasicLadderProcess(_character, _finalImplantTemplates);
        }
Exemple #16
0
        public void AllLadderProcessesAreEquivalentWhenTheOnlyLadderSlotsAvailableArentUseful()
        {
            var character = new Character(
                agilityValue: 281, intelligenceValue: 315, psychicValue: 305,
                senseValue: 213, staminaValue: 301, strengthValue: 380, treatmentValue: 662.6250);
            var finalImplantTemplates = new[]
            {
                ImplantTemplate.GetImplantTemplate(ImplantSlot.RightWrist, Skill.RunSpeed, Skill.NanoResist, Skill.MultMelee),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.LeftWrist, Skill.MultMelee, Skill.RunSpeed, Skill.NanoResist),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.LeftHand, null, ArmorClass.FireAC, Skill.MartialArts),
                ImplantTemplate.GetImplantTemplate(ImplantSlot.LeftArm, Skill.Brawling, Skill.TwoHandBlunt, null),
            };

            // Right-arm and left-arm can only buff strength, which doesn't trickle to treatment, so it's not useful.
            var unavailableImplantSlots = ImplantSlot.LadderImplantSlots
                                          .Where(s => s != ImplantSlot.RightArm && s != ImplantSlot.LeftArm);

            var degenerateLadderProcess = new DegenerateLadderProcess(character, finalImplantTemplates);
            var basicLadderProcess      = new BasicLadderProcess(character, finalImplantTemplates, unavailableImplantSlots);
            var advancedLadderProcess   = new AdvancedLadderProcess(character, finalImplantTemplates, unavailableImplantSlots);

            CollectionAssert.AreEquivalent(
                degenerateLadderProcess.OrderedFinalImplants.ToArray(),
                basicLadderProcess.OrderedFinalImplants.ToArray());
            CollectionAssert.AreEquivalent(
                basicLadderProcess.OrderedFinalImplants.ToArray(),
                advancedLadderProcess.OrderedFinalImplants.ToArray());
            CollectionAssert.AreEquivalent(
                degenerateLadderProcess.OrderedLadderImplants.ToArray(),
                basicLadderProcess.OrderedLadderImplants.ToArray());
            CollectionAssert.AreEquivalent(
                basicLadderProcess.OrderedLadderImplants.ToArray(),
                advancedLadderProcess.OrderedLadderImplants.ToArray());
            Assert.AreEqual(138, degenerateLadderProcess.AverageFinalImplantQL);
            Assert.AreEqual(138, basicLadderProcess.AverageFinalImplantQL);
            Assert.AreEqual(138, advancedLadderProcess.AverageFinalImplantQL);
        }