public void ArcaneTricksterSpellSlotTests()
        {
            const string ArcaneTrickster = "ArcaneTrickster";

            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level1, SlotLevel1));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level1, SlotLevel2));

            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level2, SlotLevel1));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level2, SlotLevel2));

            Assert.AreEqual(2, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level3, Cantrip));
            Assert.AreEqual(2, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level3, SlotLevel1));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level3, SlotLevel2));

            Assert.AreEqual(2, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level4, Cantrip));
            Assert.AreEqual(3, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level4, SlotLevel1));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level4, SlotLevel2));

            Assert.AreEqual(2, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level5, Cantrip));
            Assert.AreEqual(3, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level5, SlotLevel1));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level5, SlotLevel2));

            Assert.AreEqual(2, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level6, Cantrip));
            Assert.AreEqual(3, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level6, SlotLevel1));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level6, SlotLevel2));

            Assert.AreEqual(2, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level7, Cantrip));
            Assert.AreEqual(4, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level7, SlotLevel1));
            Assert.AreEqual(2, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level7, SlotLevel2));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(ArcaneTrickster, Level7, SlotLevel3));
        }
        public void SpellSorcererSlotTests()
        {
            const string Sorcerer = "Sorcerer";

            Assert.AreEqual(4, DndUtils.GetAvailableSpellSlots(Sorcerer, Level1, Cantrip));
            Assert.AreEqual(2, DndUtils.GetAvailableSpellSlots(Sorcerer, Level1, SlotLevel1));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(Sorcerer, Level1, SlotLevel2));

            Assert.AreEqual(3, DndUtils.GetAvailableSpellSlots(Sorcerer, Level2, SlotLevel1));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(Sorcerer, Level2, SlotLevel2));

            Assert.AreEqual(4, DndUtils.GetAvailableSpellSlots(Sorcerer, Level3, SlotLevel1));
            Assert.AreEqual(2, DndUtils.GetAvailableSpellSlots(Sorcerer, Level3, SlotLevel2));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(Sorcerer, Level3, SlotLevel3));

            Assert.AreEqual(4, DndUtils.GetAvailableSpellSlots(Sorcerer, Level4, SlotLevel1));
            Assert.AreEqual(3, DndUtils.GetAvailableSpellSlots(Sorcerer, Level4, SlotLevel2));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(Sorcerer, Level4, SlotLevel3));

            Assert.AreEqual(4, DndUtils.GetAvailableSpellSlots(Sorcerer, Level5, SlotLevel1));
            Assert.AreEqual(3, DndUtils.GetAvailableSpellSlots(Sorcerer, Level5, SlotLevel2));
            Assert.AreEqual(2, DndUtils.GetAvailableSpellSlots(Sorcerer, Level5, SlotLevel3));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(Sorcerer, Level5, SlotLevel4));

            Assert.AreEqual(4, DndUtils.GetAvailableSpellSlots(Sorcerer, Level6, SlotLevel1));
            Assert.AreEqual(3, DndUtils.GetAvailableSpellSlots(Sorcerer, Level6, SlotLevel2));
            Assert.AreEqual(3, DndUtils.GetAvailableSpellSlots(Sorcerer, Level6, SlotLevel3));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(Sorcerer, Level6, SlotLevel4));

            Assert.AreEqual(4, DndUtils.GetAvailableSpellSlots(Sorcerer, Level7, SlotLevel1));
            Assert.AreEqual(3, DndUtils.GetAvailableSpellSlots(Sorcerer, Level7, SlotLevel2));
            Assert.AreEqual(3, DndUtils.GetAvailableSpellSlots(Sorcerer, Level7, SlotLevel3));
            Assert.AreEqual(1, DndUtils.GetAvailableSpellSlots(Sorcerer, Level7, SlotLevel4));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(Sorcerer, Level7, SlotLevel5));

            Assert.AreEqual(4, DndUtils.GetAvailableSpellSlots(Sorcerer, Level8, SlotLevel1));
            Assert.AreEqual(3, DndUtils.GetAvailableSpellSlots(Sorcerer, Level8, SlotLevel2));
            Assert.AreEqual(3, DndUtils.GetAvailableSpellSlots(Sorcerer, Level8, SlotLevel3));
            Assert.AreEqual(2, DndUtils.GetAvailableSpellSlots(Sorcerer, Level8, SlotLevel4));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(Sorcerer, Level8, SlotLevel5));

            Assert.AreEqual(4, DndUtils.GetAvailableSpellSlots(Sorcerer, Level9, SlotLevel1));
            Assert.AreEqual(3, DndUtils.GetAvailableSpellSlots(Sorcerer, Level9, SlotLevel2));
            Assert.AreEqual(3, DndUtils.GetAvailableSpellSlots(Sorcerer, Level9, SlotLevel3));
            Assert.AreEqual(3, DndUtils.GetAvailableSpellSlots(Sorcerer, Level9, SlotLevel4));
            Assert.AreEqual(1, DndUtils.GetAvailableSpellSlots(Sorcerer, Level9, SlotLevel5));
            Assert.AreEqual(0, DndUtils.GetAvailableSpellSlots(Sorcerer, Level9, SlotLevel6));
        }