Refactor combat level calculations to use closed-form formulas. (#8874)

* Refactor combat level calculations to use closed-form formulas.

Also move most calculations to the Experience utility class.
Fixes #7411.

* Add new test for magic levels that barely reach the next combat level.

* Add another test that breaks on master.
This commit is contained in:
emerald000
2019-05-20 10:31:16 -04:00
committed by Adam
parent 8890d5b634
commit 8026785f16
3 changed files with 396 additions and 286 deletions

View File

@@ -24,209 +24,184 @@
*/
package net.runelite.client.plugins.combatlevel;
import com.google.inject.Guice;
import com.google.inject.testing.fieldbinder.Bind;
import com.google.inject.testing.fieldbinder.BoundFieldModule;
import net.runelite.api.Client;
import net.runelite.api.Player;
import net.runelite.api.Skill;
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.calcLevels;
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.calcLevelsPray;
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.calcLevelsRM;
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.ATT_STR_MULT;
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.DEF_HP_MULT;
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.RANGE_MAGIC_LEVEL_MULT;
import static net.runelite.client.plugins.combatlevel.CombatLevelOverlay.RANGE_MAGIC_MULT;
import net.runelite.api.Experience;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import static org.mockito.Mockito.when;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.HashMap;
@RunWith(MockitoJUnitRunner.class)
public class CombatLevelPluginTest
{
@Mock
@Bind
private Client client;
@Mock
private Player player;
@Before
public void setUp()
{
Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this);
when(client.getLocalPlayer()).thenReturn(player);
}
private HashMap<String, Double> getBaseValues()
{
int attackLevel = client.getRealSkillLevel(Skill.ATTACK);
int strengthLevel = client.getRealSkillLevel(Skill.STRENGTH);
int defenceLevel = client.getRealSkillLevel(Skill.DEFENCE);
int hitpointsLevel = client.getRealSkillLevel(Skill.HITPOINTS);
int magicLevel = client.getRealSkillLevel(Skill.MAGIC);
int rangedLevel = client.getRealSkillLevel(Skill.RANGED);
int prayerLevel = client.getRealSkillLevel(Skill.PRAYER);
double base = DEF_HP_MULT * (defenceLevel + hitpointsLevel + Math.floor(prayerLevel / 2));
double melee = ATT_STR_MULT * (attackLevel + strengthLevel);
double range = RANGE_MAGIC_MULT * Math.floor(rangedLevel * RANGE_MAGIC_LEVEL_MULT);
double mage = RANGE_MAGIC_MULT * Math.floor(magicLevel * RANGE_MAGIC_LEVEL_MULT);
double max = Math.max(melee, Math.max(range, mage));
HashMap<String, Double> result = new HashMap<>();
result.put("base", base);
result.put("melee", melee);
result.put("max", max);
return result;
}
@Test
public void testNewPlayer()
{
when(player.getCombatLevel()).thenReturn(3);
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(1);
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(1);
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(1);
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(1);
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(1);
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(1);
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(10);
int attackLevel = 1;
int strengthLevel = 1;
int defenceLevel = 1;
int hitpointsLevel = 10;
int magicLevel = 1;
int rangeLevel = 1;
int prayerLevel = 1;
HashMap<String, Double> baseValues = getBaseValues();
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
// test combat level
assertEquals(3, combatLevel);
// test attack/strength
assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("melee"),
player.getCombatLevel() + 1, ATT_STR_MULT));
assertEquals(2, meleeNeed);
// test defence/hitpoints
assertEquals(3, calcLevels(baseValues.get("base") + baseValues.get("max"),
player.getCombatLevel() + 1, DEF_HP_MULT));
// test prayer
assertEquals(5, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
assertEquals(3, hpDefNeed);
// test ranged
assertEquals(2, calcLevelsRM(client.getRealSkillLevel(Skill.RANGED),
player.getCombatLevel() + 1, baseValues.get("base")));
assertEquals(2, rangeNeed);
// test magic
assertEquals(2, calcLevelsRM(client.getRealSkillLevel(Skill.MAGIC),
player.getCombatLevel() + 1, baseValues.get("base")));
assertEquals(2, magicNeed);
// test prayer
assertEquals(5, prayerNeed);
}
@Test
public void testAll10()
{
when(player.getCombatLevel()).thenReturn(12);
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(10);
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(10);
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(10);
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(10);
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(10);
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(10);
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(10);
int attackLevel = 10;
int strengthLevel = 10;
int defenceLevel = 10;
int hitpointsLevel = 10;
int magicLevel = 10;
int rangeLevel = 10;
int prayerLevel = 10;
HashMap<String, Double> baseValues = getBaseValues();
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
// test combat level
assertEquals(12, combatLevel);
// test attack/strength
assertEquals(1, calcLevels(baseValues.get("base") + baseValues.get("melee"),
player.getCombatLevel() + 1, ATT_STR_MULT));
assertEquals(1, meleeNeed);
// test defence/hitpoints
assertEquals(1, calcLevels(baseValues.get("base") + baseValues.get("max"),
player.getCombatLevel() + 1, DEF_HP_MULT));
// test prayer
assertEquals(2, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
assertEquals(1, hpDefNeed);
// test ranged
assertEquals(4, calcLevelsRM(client.getRealSkillLevel(Skill.RANGED),
player.getCombatLevel() + 1, baseValues.get("base")));
assertEquals(4, rangeNeed);
// test magic
assertEquals(4, calcLevelsRM(client.getRealSkillLevel(Skill.MAGIC),
player.getCombatLevel() + 1, baseValues.get("base")));
assertEquals(4, magicNeed);
// test prayer
assertEquals(2, prayerNeed);
}
@Test
public void testPlayerBmid()
{
// snapshot of current stats 2018-10-2
when(player.getCombatLevel()).thenReturn(83);
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(65);
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(70);
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(60);
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(56);
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(75);
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(73);
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(71);
int attackLevel = 65;
int strengthLevel = 70;
int defenceLevel = 60;
int hitpointsLevel = 71;
int magicLevel = 73;
int rangeLevel = 75;
int prayerLevel = 56;
HashMap<String, Double> baseValues = getBaseValues();
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
// test combat level
assertEquals(83, combatLevel);
// test attack/strength
assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("melee"),
player.getCombatLevel() + 1, ATT_STR_MULT));
assertEquals(2, meleeNeed);
// test defence/hitpoints
assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("max"),
player.getCombatLevel() + 1, DEF_HP_MULT));
// test prayer
assertEquals(4, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
assertEquals(2, hpDefNeed);
// test ranged
assertEquals(17, calcLevelsRM(client.getRealSkillLevel(Skill.RANGED),
player.getCombatLevel() + 1, baseValues.get("base")));
assertEquals(17, rangeNeed);
// test magic
assertEquals(19, calcLevelsRM(client.getRealSkillLevel(Skill.MAGIC),
player.getCombatLevel() + 1, baseValues.get("base")));
assertEquals(19, magicNeed);
// test prayer
assertEquals(4, prayerNeed);
}
@Test
public void testPlayerRunelite()
{
// snapshot of current stats 2018-10-2
when(player.getCombatLevel()).thenReturn(43);
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(43);
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(36);
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(1);
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(15);
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(51);
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(64);
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(42);
int attackLevel = 43;
int strengthLevel = 36;
int defenceLevel = 1;
int hitpointsLevel = 42;
int magicLevel = 64;
int rangeLevel = 51;
int prayerLevel = 15;
HashMap<String, Double> baseValues = getBaseValues();
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
// test combat level
assertEquals(43, combatLevel);
// test attack/strength
assertEquals(18, calcLevels(baseValues.get("base") + baseValues.get("melee"),
player.getCombatLevel() + 1, ATT_STR_MULT));
assertEquals(18, meleeNeed);
// test defence/hitpoints
assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("max"),
player.getCombatLevel() + 1, DEF_HP_MULT));
// test prayer
assertEquals(3, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
assertEquals(2, hpDefNeed);
// test ranged
assertEquals(14, calcLevelsRM(client.getRealSkillLevel(Skill.RANGED),
player.getCombatLevel() + 1, baseValues.get("base")));
assertEquals(14, rangeNeed);
// test magic
assertEquals(1, calcLevelsRM(client.getRealSkillLevel(Skill.MAGIC),
player.getCombatLevel() + 1, baseValues.get("base")));
assertEquals(1, magicNeed);
// test prayer
assertEquals(3, prayerNeed);
}
@Test
@@ -234,83 +209,188 @@ public class CombatLevelPluginTest
{
// snapshot of current stats 2018-10-3
// Zezima cannot earn a combat level from ranged/magic anymore, so it won't show as the result is too high
when(player.getCombatLevel()).thenReturn(90);
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(74);
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(74);
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(72);
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(52);
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(44);
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(60);
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(72);
int attackLevel = 74;
int strengthLevel = 74;
int defenceLevel = 72;
int hitpointsLevel = 72;
int magicLevel = 60;
int rangeLevel = 44;
int prayerLevel = 52;
HashMap<String, Double> baseValues = getBaseValues();
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
// test combat level
assertEquals(90, combatLevel);
// test attack/strength
assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("melee"),
player.getCombatLevel() + 1, ATT_STR_MULT));
assertEquals(2, meleeNeed);
// test defence/hitpoints
assertEquals(2, calcLevels(baseValues.get("base") + baseValues.get("max"),
player.getCombatLevel() + 1, DEF_HP_MULT));
assertEquals(2, hpDefNeed);
// test prayer
assertEquals(4, calcLevelsPray(baseValues.get("base") + baseValues.get("max"),
player.getCombatLevel() + 1, client.getRealSkillLevel(Skill.PRAYER)));
assertEquals(4, prayerNeed);
}
@Test
public void testPrayerLevelsNeeded()
{
when(player.getCombatLevel()).thenReturn(124);
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(99);
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(99);
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(99);
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(89);
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(99);
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(99);
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(99);
int attackLevel = 99;
int strengthLevel = 99;
int defenceLevel = 99;
int hitpointsLevel = 99;
int magicLevel = 99;
int rangeLevel = 99;
int prayerLevel = 89;
assertEquals(1, neededPrayerLevels());
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
// test combat level
assertEquals(124, combatLevel);
// test prayer
assertEquals(1, prayerNeed);
}
@Test
public void testEvenPrayerLevelsNeededWhenNearNextCombatLevel()
{
when(player.getCombatLevel()).thenReturn(90);
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(74);
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(75);
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(72);
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(52);
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(44);
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(60);
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(72);
int attackLevel = 74;
int strengthLevel = 75;
int defenceLevel = 72;
int hitpointsLevel = 72;
int magicLevel = 60;
int rangeLevel = 44;
int prayerLevel = 52;
assertEquals(2, neededPrayerLevels());
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
// test combat level
assertEquals(90, combatLevel);
// test prayer
assertEquals(2, prayerNeed);
}
@Test
public void testOddPrayerLevelsNeededWhenNearNextCombatLevel()
{
when(player.getCombatLevel()).thenReturn(90);
when(client.getRealSkillLevel(Skill.ATTACK)).thenReturn(74);
when(client.getRealSkillLevel(Skill.STRENGTH)).thenReturn(75);
when(client.getRealSkillLevel(Skill.DEFENCE)).thenReturn(72);
when(client.getRealSkillLevel(Skill.PRAYER)).thenReturn(53);
when(client.getRealSkillLevel(Skill.RANGED)).thenReturn(44);
when(client.getRealSkillLevel(Skill.MAGIC)).thenReturn(60);
when(client.getRealSkillLevel(Skill.HITPOINTS)).thenReturn(72);
int attackLevel = 74;
int strengthLevel = 75;
int defenceLevel = 72;
int hitpointsLevel = 72;
int magicLevel = 60;
int rangeLevel = 44;
int prayerLevel = 53;
assertEquals(1, neededPrayerLevels());
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
// test combat level
assertEquals(90, combatLevel);
// test prayer
assertEquals(1, prayerNeed);
}
private int neededPrayerLevels()
@Test
public void testNextMagicLevelBarelyReachesNextCombatLevel()
{
HashMap<String, Double> baseValues = getBaseValues();
int attackLevel = 40;
int strengthLevel = 44;
int defenceLevel = 46;
int hitpointsLevel = 39;
int magicLevel = 57;
int rangeLevel = 40;
int prayerLevel = 29;
return calcLevelsPray(
baseValues.get("base") + baseValues.get("max"),
player.getCombatLevel() + 1,
client.getRealSkillLevel(Skill.PRAYER)
);
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
// test combat level
assertEquals(52, combatLevel);
// test attack/strength
assertEquals(3, meleeNeed);
// test defence/hitpoints
assertEquals(3, hpDefNeed);
// test ranged
assertEquals(18, rangeNeed);
// test magic
assertEquals(1, magicNeed);
// test prayer
assertEquals(5, prayerNeed);
}
@Test
public void testRangeMagicLevelsNeeded()
{
int attackLevel = 60;
int strengthLevel = 69;
int defenceLevel = 1;
int hitpointsLevel = 78;
int magicLevel = 85;
int rangeLevel = 85;
int prayerLevel = 52;
int combatLevel = Experience.getCombatLevel(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int meleeNeed = Experience.getNextCombatLevelMelee(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int hpDefNeed = Experience.getNextCombatLevelHpDef(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int rangeNeed = Experience.getNextCombatLevelRange(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int magicNeed = Experience.getNextCombatLevelMagic(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
int prayerNeed = Experience.getNextCombatLevelPrayer(attackLevel, strengthLevel, defenceLevel, hitpointsLevel,
magicLevel, rangeLevel, prayerLevel);
// test combat level
assertEquals(68, combatLevel);
// test attack/strength
assertEquals(3, meleeNeed);
// test defence/hitpoints
assertEquals(4, hpDefNeed);
// test ranged
assertEquals(3, rangeNeed);
// test magic
assertEquals(3, magicNeed);
// test prayer
assertEquals(8, prayerNeed);
}
}