public void AdvancedLadderProcessIsBetterThanBasic() { var basicLadderProcess = new BasicLadderProcess(_character, _finalImplantTemplates); var advancedLadderProcess = new AdvancedLadderProcess(_character, _finalImplantTemplates); Assert.IsTrue(basicLadderProcess.AverageFinalImplantQL < advancedLadderProcess.AverageFinalImplantQL); }
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); }
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); }
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)); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }