|
@@ -12,6 +12,8 @@ import org.junit.jupiter.params.provider.MethodSource;
|
|
|
import java.util.logging.Logger;
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
+import static com.gmail.nossr50.datatypes.skills.PrimarySkillType.ACROBATICS;
|
|
|
+import static com.gmail.nossr50.datatypes.skills.PrimarySkillType.MINING;
|
|
|
import static com.gmail.nossr50.datatypes.skills.SubSkillType.*;
|
|
|
import static com.gmail.nossr50.util.random.ProbabilityTestUtils.assertProbabilityExpectations;
|
|
|
import static com.gmail.nossr50.util.random.ProbabilityUtil.calculateCurrentSkillProbability;
|
|
@@ -68,9 +70,106 @@ class ProbabilityUtilTest extends MMOTestEnvironment {
|
|
|
assertProbabilityExpectations(20, probability);
|
|
|
}
|
|
|
|
|
|
+ private static Stream<Arguments> provideSkillProbabilityTestData() {
|
|
|
+ return Stream.of(
|
|
|
+ // skillLevel, floor, ceiling, maxBonusLevel, expectedValue
|
|
|
+
|
|
|
+ // 20% chance at skill level 1000
|
|
|
+ Arguments.of(1000, 0, 20, 1000, 0.2),
|
|
|
+ // 10% chance at skill level 500
|
|
|
+ Arguments.of(500, 0, 20, 1000, 0.1),
|
|
|
+ // 5% chance at skill level 250
|
|
|
+ Arguments.of(250, 0, 20, 1000, 0.05),
|
|
|
+ // 0% chance at skill level 0
|
|
|
+ Arguments.of(0, 0, 20, 1000, 0.0),
|
|
|
+ // 0% chance at skill level 1000
|
|
|
+ Arguments.of(1000, 0, 0, 1000, 0.0),
|
|
|
+ // 1% chance at skill level 1000
|
|
|
+ Arguments.of(1000, 0, 1, 1000, 0.01)
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ @ParameterizedTest
|
|
|
+ @MethodSource("provideSkillProbabilityTestData")
|
|
|
+ void testCalculateCurrentSkillProbability(double skillLevel, double floor, double ceiling, double maxBonusLevel,
|
|
|
+ double expectedValue) {
|
|
|
+ // When
|
|
|
+ final Probability probability = calculateCurrentSkillProbability(skillLevel, floor, ceiling, maxBonusLevel);
|
|
|
+
|
|
|
+ // Then
|
|
|
+ assertEquals(expectedValue, probability.getValue());
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
- public void calculateCurrentSkillProbabilityShouldBeTwenty() {
|
|
|
- final Probability probability = calculateCurrentSkillProbability(1000, 0, 20, 1000);
|
|
|
- assertEquals(0.2D, probability.getValue());
|
|
|
+ public void getRNGDisplayValuesShouldReturn10PercentForDodge() {
|
|
|
+ // Given
|
|
|
+ when(advancedConfig.getMaximumProbability(ACROBATICS_DODGE)).thenReturn(20D);
|
|
|
+ when(advancedConfig.getMaxBonusLevel(ACROBATICS_DODGE)).thenReturn(1000);
|
|
|
+ mmoPlayer.modifySkill(ACROBATICS, 500);
|
|
|
+
|
|
|
+ // When & Then
|
|
|
+ final String[] rngDisplayValues = ProbabilityUtil.getRNGDisplayValues(mmoPlayer, ACROBATICS_DODGE);
|
|
|
+ assertEquals("10.00%", rngDisplayValues[0]);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void getRNGDisplayValuesShouldReturn20PercentForDodge() {
|
|
|
+ // Given
|
|
|
+ when(advancedConfig.getMaximumProbability(ACROBATICS_DODGE)).thenReturn(20D);
|
|
|
+ when(advancedConfig.getMaxBonusLevel(ACROBATICS_DODGE)).thenReturn(1000);
|
|
|
+ mmoPlayer.modifySkill(ACROBATICS, 1000);
|
|
|
+
|
|
|
+ // When & then
|
|
|
+ final String[] rngDisplayValues = ProbabilityUtil.getRNGDisplayValues(mmoPlayer, ACROBATICS_DODGE);
|
|
|
+ assertEquals("20.00%", rngDisplayValues[0]);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void getRNGDisplayValuesShouldReturn0PercentForDodge() {
|
|
|
+ // Given
|
|
|
+ when(advancedConfig.getMaximumProbability(ACROBATICS_DODGE)).thenReturn(20D);
|
|
|
+ when(advancedConfig.getMaxBonusLevel(ACROBATICS_DODGE)).thenReturn(1000);
|
|
|
+ mmoPlayer.modifySkill(ACROBATICS, 0);
|
|
|
+
|
|
|
+ // When & then
|
|
|
+ final String[] rngDisplayValues = ProbabilityUtil.getRNGDisplayValues(mmoPlayer, ACROBATICS_DODGE);
|
|
|
+ assertEquals("0.00%", rngDisplayValues[0]);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void getRNGDisplayValuesShouldReturn10PercentForDoubleDrops() {
|
|
|
+ // Given
|
|
|
+ when(advancedConfig.getMaximumProbability(MINING_DOUBLE_DROPS)).thenReturn(100D);
|
|
|
+ when(advancedConfig.getMaxBonusLevel(MINING_DOUBLE_DROPS)).thenReturn(1000);
|
|
|
+ mmoPlayer.modifySkill(MINING, 100);
|
|
|
+
|
|
|
+ // When & Then
|
|
|
+ final String[] rngDisplayValues = ProbabilityUtil.getRNGDisplayValues(mmoPlayer, MINING_DOUBLE_DROPS);
|
|
|
+ assertEquals("10.00%", rngDisplayValues[0]);
|
|
|
}
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void getRNGDisplayValuesShouldReturn50PercentForDoubleDrops() {
|
|
|
+ // Given
|
|
|
+ when(advancedConfig.getMaximumProbability(MINING_DOUBLE_DROPS)).thenReturn(100D);
|
|
|
+ when(advancedConfig.getMaxBonusLevel(MINING_DOUBLE_DROPS)).thenReturn(1000);
|
|
|
+ mmoPlayer.modifySkill(MINING, 500);
|
|
|
+
|
|
|
+ // When & Then
|
|
|
+ final String[] rngDisplayValues = ProbabilityUtil.getRNGDisplayValues(mmoPlayer, MINING_DOUBLE_DROPS);
|
|
|
+ assertEquals("50.00%", rngDisplayValues[0]);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void getRNGDisplayValuesShouldReturn100PercentForDoubleDrops() {
|
|
|
+ // Given
|
|
|
+ when(advancedConfig.getMaximumProbability(MINING_DOUBLE_DROPS)).thenReturn(100D);
|
|
|
+ when(advancedConfig.getMaxBonusLevel(MINING_DOUBLE_DROPS)).thenReturn(1000);
|
|
|
+ mmoPlayer.modifySkill(MINING, 1000);
|
|
|
+
|
|
|
+ // When & Then
|
|
|
+ final String[] rngDisplayValues = ProbabilityUtil.getRNGDisplayValues(mmoPlayer, MINING_DOUBLE_DROPS);
|
|
|
+ assertEquals("100.00%", rngDisplayValues[0]);
|
|
|
+ }
|
|
|
+
|
|
|
}
|