ProbabilityUtilTest.java 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package com.gmail.nossr50.util.random;
  2. import com.gmail.nossr50.config.AdvancedConfig;
  3. import com.gmail.nossr50.datatypes.player.McMMOPlayer;
  4. import com.gmail.nossr50.datatypes.skills.SubSkillType;
  5. import com.gmail.nossr50.mcMMO;
  6. import org.bukkit.entity.Player;
  7. import org.junit.jupiter.api.BeforeEach;
  8. import org.junit.jupiter.api.Test;
  9. import org.junit.jupiter.params.ParameterizedTest;
  10. import org.junit.jupiter.params.provider.Arguments;
  11. import org.junit.jupiter.params.provider.MethodSource;
  12. import java.util.stream.Stream;
  13. import static com.gmail.nossr50.datatypes.skills.SubSkillType.*;
  14. import static org.junit.jupiter.api.Assertions.assertEquals;
  15. import static org.mockito.Mockito.mock;
  16. import static org.mockito.Mockito.when;
  17. class ProbabilityUtilTest {
  18. mcMMO mmoInstance;
  19. AdvancedConfig advancedConfig;
  20. final static double impactChance = 11D;
  21. final static double greaterImpactChance = 0.007D;
  22. final static double fastFoodChance = 45.5D;
  23. @BeforeEach
  24. public void setupMocks() throws NoSuchFieldException, IllegalAccessException {
  25. this.mmoInstance = mock(mcMMO.class);
  26. mcMMO.class.getField("p").set(null, mmoInstance);
  27. this.advancedConfig = mock(AdvancedConfig.class);
  28. when(mmoInstance.getAdvancedConfig()).thenReturn(advancedConfig);
  29. when(advancedConfig.getImpactChance()).thenReturn(impactChance);
  30. when(advancedConfig.getGreaterImpactChance()).thenReturn(greaterImpactChance);
  31. when(advancedConfig.getFastFoodChance()).thenReturn(fastFoodChance);
  32. }
  33. private static Stream<Arguments> staticChanceSkills() {
  34. return Stream.of(
  35. // static probability, % of time for success
  36. Arguments.of(AXES_ARMOR_IMPACT, impactChance),
  37. Arguments.of(AXES_GREATER_IMPACT, greaterImpactChance),
  38. Arguments.of(TAMING_FAST_FOOD_SERVICE, fastFoodChance)
  39. );
  40. }
  41. @ParameterizedTest
  42. @MethodSource("staticChanceSkills")
  43. void testStaticChanceSkills(SubSkillType subSkillType, double expectedWinPercent) throws InvalidStaticChance {
  44. Probability staticRandomChance = ProbabilityUtil.getStaticRandomChance(subSkillType);
  45. assertProbabilityExpectations(expectedWinPercent, staticRandomChance);
  46. }
  47. private static void assertProbabilityExpectations(double expectedWinPercent, Probability probability) {
  48. double iterations = 2.0e7;
  49. double winCount = 0;
  50. for (int i = 0; i < iterations; i++) {
  51. if(probability.evaluate()) {
  52. winCount++;
  53. }
  54. }
  55. double successPercent = (winCount / iterations) * 100;
  56. System.out.println(successPercent + ", " + expectedWinPercent);
  57. assertEquals(expectedWinPercent, successPercent, 0.05D);
  58. }
  59. }