using System.Collections; using System.Collections.Generic; using NUnit.Framework; using Set.Data; namespace Tests.Editor { [TestFixture] public class TestTraitsUtils { [Test] [TestCaseSource(typeof(TraitTestCases), "EmblemsSynergies")] public void TestMergeEmblems( Dictionary emblem, Dictionary synergies, Dictionary expected ) { var output = TraitsMapping.MergeEmblems(emblem, synergies); foreach (KeyValuePair pair in expected) { Assert.IsTrue(output[pair.Key] == pair.Value); } } [Test] [TestCaseSource(typeof(TraitTestCases), "ActiveTraits")] public void TestActiveSynergyFilter(Dictionary synergies, int expected) { int output = TraitsMapping.FilterActiveTraits(synergies); Assert.IsTrue(Equals(output, expected)); } [Test] public void TestMapping() { foreach (var champTraits in TraitsMapping.ChampsTraits) { var champion = champTraits.Key; var traits = TraitUtils.FromInt(champTraits.Value); foreach (var trait in traits) { var allChampofTrait = TraitsMapping.TraitsChamp[(int)trait]; HashSet champions = ChampionUtils.FromLong(allChampofTrait); Assert.IsTrue( ChampionUtils.ContainsChampion( allChampofTrait, champion ) ); } } foreach (var traitChamp in TraitsMapping.TraitsChamp) { var trait = traitChamp.Key; var champions = ChampionUtils.FromLong(traitChamp.Value); foreach (var champion in champions) { var allTraitsOfChamp = TraitsMapping.ChampsTraits[(long)champion]; Assert.IsTrue( TraitUtils.ContainsTrait( allTraitsOfChamp, trait ) ); } } } [Test] [TestCaseSource(typeof(TraitTestCases), "traitsEnum")] public void TestIntTrait(int traitInt) { var traits = TraitUtils.FromInt(traitInt); long output = TraitUtils.ToInt(traits); Assert.IsTrue(traitInt == output); } [Test] [TestCaseSource(typeof(TraitTestCases), "traitsToInt")] public void TestTraitToInt(HashSet traits, int expectedInt) { int output = TraitUtils.ToInt(traits); Assert.IsTrue(output == expectedInt); } } public class TraitTestCases { public static IEnumerable EmblemsSynergies { get { yield return new TestCaseData( new Dictionary { { (int)TraitsEnum.BATTLEACADEMIA, 1 } }, new Dictionary { { (int)TraitsEnum.BATTLEACADEMIA, 1 } }, new Dictionary { { (int)TraitsEnum.BATTLEACADEMIA, 2 } } ); yield return new TestCaseData( new Dictionary { { (int)TraitsEnum.BATTLEACADEMIA, 1 }, { (int)TraitsEnum.CRYSTALGAMBIT, 2 }, { (int)TraitsEnum.LUCHADOR, 3 }, { (int)TraitsEnum.MIGHTYMECH, 4 }, { (int)TraitsEnum.SOULFIGHTER, 5 }, { (int)TraitsEnum.BASTION, 6 }, }, new Dictionary { { (int)TraitsEnum.BATTLEACADEMIA, 1 }, { (int)TraitsEnum.CRYSTALGAMBIT, 2 }, { (int)TraitsEnum.LUCHADOR, 3 }, { (int)TraitsEnum.MIGHTYMECH, 4 }, { (int)TraitsEnum.SOULFIGHTER, 5 }, { (int)TraitsEnum.BASTION, 6 }, }, new Dictionary { { (int)TraitsEnum.BATTLEACADEMIA, 2 }, { (int)TraitsEnum.CRYSTALGAMBIT, 4 }, { (int)TraitsEnum.LUCHADOR, 6 }, { (int)TraitsEnum.MIGHTYMECH, 8 }, { (int)TraitsEnum.SOULFIGHTER, 10 }, { (int)TraitsEnum.BASTION, 12 }, } ); /* Set 15 traits list: Origins: BATTLEACADEMIA, CRYSTALGAMBIT, LUCHADOR, MIGHTYMECH, MONSTERTRAINER, SOULFIGHTER, STARGUARDIAN, SUPREMECELLS, THECREW, WRAITH, MENTOR, PRODIGY, THECHAMP, STANCEMASTER, ROGUECAPTAIN Classes: BASTION, DUELIST, EDGELORD, EXECUTIONER, HEAVYWEIGHT, JUGGERNAUT, PROTECTOR, SNIPER, SORCERER, STRATEGIST */ } } public static IEnumerable ActiveTraits { get { yield return new TestCaseData( new Dictionary { { (int)TraitsEnum.BATTLEACADEMIA, 1 }, { (int)TraitsEnum.CRYSTALGAMBIT, 2 }, { (int)TraitsEnum.LUCHADOR, 3 }, { (int)TraitsEnum.MIGHTYMECH, 4 }, { (int)TraitsEnum.SOULFIGHTER, 1 }, { (int)TraitsEnum.BASTION, 1 }, }, TraitUtils.ToInt( new HashSet { TraitsEnum.CRYSTALGAMBIT, TraitsEnum.LUCHADOR, TraitsEnum.MIGHTYMECH } ) ); yield return new TestCaseData( new Dictionary { { (int)TraitsEnum.BATTLEACADEMIA, 5 }, { (int)TraitsEnum.LUCHADOR, 2 }, { (int)TraitsEnum.STARGUARDIAN, 7 }, { (int)TraitsEnum.SOULFIGHTER, 4 }, { (int)TraitsEnum.BASTION, 3 }, }, TraitUtils.ToInt( new HashSet { TraitsEnum.BATTLEACADEMIA, TraitsEnum.STARGUARDIAN, TraitsEnum.SOULFIGHTER, TraitsEnum.BASTION } ) ); } } public static IEnumerable traitsEnum { get { yield return 156; yield return 621; yield return 123456; yield return 5; yield return 4194303; // max value yield return 4194302; } } public static IEnumerable traitsToInt { get { yield return new TestCaseData( new HashSet { TraitsEnum.BATTLEACADEMIA, TraitsEnum.CRYSTALGAMBIT }, 1 << 0 | 1 << 1 ); yield return new TestCaseData( new HashSet { TraitsEnum.BATTLEACADEMIA, TraitsEnum.CRYSTALGAMBIT, TraitsEnum.LUCHADOR, TraitsEnum.MIGHTYMECH, TraitsEnum.SOULFIGHTER, TraitsEnum.BASTION }, 1 << 0 | 1 << 1 | 1 << 2 | 1 << 3 | 1 << 5 | 1 << 15 ); yield return new TestCaseData(new HashSet { TraitsEnum.BATTLEACADEMIA }, 1 << 0); yield return new TestCaseData(new HashSet { TraitsEnum.CRYSTALGAMBIT }, 1 << 1); yield return new TestCaseData(new HashSet { TraitsEnum.LUCHADOR }, 1 << 2); yield return new TestCaseData(new HashSet { TraitsEnum.MIGHTYMECH }, 1 << 3); yield return new TestCaseData(new HashSet { TraitsEnum.MONSTERTRAINER }, 1 << 4); yield return new TestCaseData(new HashSet { TraitsEnum.SOULFIGHTER }, 1 << 5); yield return new TestCaseData(new HashSet { TraitsEnum.STARGUARDIAN }, 1 << 6); yield return new TestCaseData(new HashSet { TraitsEnum.SUPREMECELLS }, 1 << 7); yield return new TestCaseData(new HashSet { TraitsEnum.THECREW }, 1 << 8); yield return new TestCaseData(new HashSet { TraitsEnum.WRAITH }, 1 << 9); yield return new TestCaseData(new HashSet { TraitsEnum.MENTOR }, 1 << 10); yield return new TestCaseData(new HashSet { TraitsEnum.PRODIGY }, 1 << 11); yield return new TestCaseData(new HashSet { TraitsEnum.THECHAMP }, 1 << 12); yield return new TestCaseData(new HashSet { TraitsEnum.STANCEMASTER }, 1 << 13); yield return new TestCaseData(new HashSet { TraitsEnum.ROGUECAPTAIN }, 1 << 14); yield return new TestCaseData(new HashSet { TraitsEnum.BASTION }, 1 << 15); yield return new TestCaseData(new HashSet { TraitsEnum.DUELIST }, 1 << 16); yield return new TestCaseData(new HashSet { TraitsEnum.EDGELORD }, 1 << 17); yield return new TestCaseData(new HashSet { TraitsEnum.EXECUTIONER }, 1 << 18); yield return new TestCaseData(new HashSet { TraitsEnum.HEAVYWEIGHT }, 1 << 19); yield return new TestCaseData(new HashSet { TraitsEnum.JUGGERNAUT }, 1 << 20); yield return new TestCaseData(new HashSet { TraitsEnum.PROTECTOR }, 1 << 21); yield return new TestCaseData(new HashSet { TraitsEnum.SNIPER }, 1 << 22); yield return new TestCaseData(new HashSet { TraitsEnum.SORCERER }, 1 << 23); yield return new TestCaseData(new HashSet { TraitsEnum.STRATEGIST }, 1 << 24); } } } }