using System.Collections; using System.Collections.Generic; using NUnit.Framework; namespace Assets.Data { [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.ARCANA, 1 } }, new Dictionary { { (int)TraitsEnum.ARCANA, 1 } }, new Dictionary { { (int)TraitsEnum.ARCANA, 2 } } ); yield return new TestCaseData( new Dictionary { { (int)TraitsEnum.ARCANA, 1 }, { (int)TraitsEnum.DRAGON, 2 }, { (int)TraitsEnum.FROST, 3 }, { (int)TraitsEnum.HONEYMANCY, 4 }, { (int)TraitsEnum.PYRO, 5 }, { (int)TraitsEnum.WARRIOR, 6 }, }, new Dictionary { { (int)TraitsEnum.ARCANA, 1 }, { (int)TraitsEnum.DRAGON, 2 }, { (int)TraitsEnum.FROST, 3 }, { (int)TraitsEnum.HONEYMANCY, 4 }, { (int)TraitsEnum.PYRO, 5 }, { (int)TraitsEnum.WARRIOR, 6 }, }, new Dictionary { { (int)TraitsEnum.ARCANA, 2 }, { (int)TraitsEnum.DRAGON, 4 }, { (int)TraitsEnum.FROST, 6 }, { (int)TraitsEnum.HONEYMANCY, 8 }, { (int)TraitsEnum.PYRO, 10 }, { (int)TraitsEnum.WARRIOR, 12 }, } ); /* here is the list of traits : ARCANA, CHRONO, DRAGON, DRUID, ELDRICHT, FAERIE, FROST, HONEYMANCY, PORTAL, PYRO, SUGARCRAFT, WITCHCRAFT, BASTION, BLASTER, HUNTER, INCANTATOR, MAGE, MULTISTRIKER, PRESERVER, SCHOLAR, SHAPESHIFTER, VANGUARD, WARRIOR */ } } public static IEnumerable ActiveTraits { get { yield return new TestCaseData( new Dictionary { { (int)TraitsEnum.ARCANA, 1 }, { (int)TraitsEnum.DRAGON, 2 }, { (int)TraitsEnum.FROST, 3 }, { (int)TraitsEnum.HONEYMANCY, 4 }, { (int)TraitsEnum.PYRO, 1 }, { (int)TraitsEnum.WARRIOR, 1 }, }, TraitUtils.ToInt( new HashSet { TraitsEnum.DRAGON, TraitsEnum.FROST, TraitsEnum.HONEYMANCY } ) ); yield return new TestCaseData( new Dictionary { { (int)TraitsEnum.ARCANA, 5 }, { (int)TraitsEnum.FROST, 2 }, { (int)TraitsEnum.HONEYMANCY, 7 }, { (int)TraitsEnum.PYRO, 4 }, { (int)TraitsEnum.WARRIOR, 3 }, }, TraitUtils.ToInt( new HashSet { TraitsEnum.ARCANA, TraitsEnum.HONEYMANCY, TraitsEnum.PYRO, TraitsEnum.WARRIOR, } ) ); } } 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.ARCANA, TraitsEnum.DRAGON }, 1<<0 | 1<<2 ); yield return new TestCaseData( new HashSet { TraitsEnum.ARCANA, TraitsEnum.DRAGON, TraitsEnum.FROST, TraitsEnum.HONEYMANCY, TraitsEnum.PYRO, TraitsEnum.WARRIOR }, 1<<0 | 1<<2 | 1<<6 | 1<<7 | 1<<9 | 1<<22 ); yield return new TestCaseData(new HashSet{TraitsEnum.ARCANA},1 << 0); yield return new TestCaseData(new HashSet{TraitsEnum.CHRONO},1 << 1); yield return new TestCaseData(new HashSet{TraitsEnum.DRAGON},1 << 2); yield return new TestCaseData(new HashSet{TraitsEnum.DRUID},1 << 3); yield return new TestCaseData(new HashSet{TraitsEnum.ELDRICHT},1 << 4); yield return new TestCaseData(new HashSet{TraitsEnum.FAERIE},1 << 5); yield return new TestCaseData(new HashSet{TraitsEnum.FROST},1 << 6); yield return new TestCaseData(new HashSet{TraitsEnum.HONEYMANCY},1 << 7); yield return new TestCaseData(new HashSet{TraitsEnum.PORTAL},1 << 8); yield return new TestCaseData(new HashSet{TraitsEnum.PYRO},1 << 9); yield return new TestCaseData(new HashSet{TraitsEnum.SUGARCRAFT},1 << 10); yield return new TestCaseData(new HashSet{TraitsEnum.WITCHCRAFT},1 << 11); yield return new TestCaseData(new HashSet{TraitsEnum.BASTION},1 << 12); yield return new TestCaseData(new HashSet{TraitsEnum.BLASTER},1 << 13); yield return new TestCaseData(new HashSet{TraitsEnum.HUNTER},1 << 14); yield return new TestCaseData(new HashSet{TraitsEnum.INCANTATOR},1 << 15); yield return new TestCaseData(new HashSet{TraitsEnum.MAGE},1 << 16); yield return new TestCaseData(new HashSet{TraitsEnum.MULTISTRIKER},1 << 17); yield return new TestCaseData(new HashSet{TraitsEnum.PRESERVER},1 << 18); yield return new TestCaseData(new HashSet{TraitsEnum.SCHOLAR},1 << 19); yield return new TestCaseData(new HashSet{TraitsEnum.SHAPESHIFTER},1 << 20); yield return new TestCaseData(new HashSet{TraitsEnum.VANGUARD},1 << 21); yield return new TestCaseData(new HashSet{TraitsEnum.WARRIOR},1 << 22); } } } }