Add some unit tests for new RNG dice rolls

This commit is contained in:
nossr50
2022-12-11 15:38:04 -08:00
parent b077d9e0fb
commit 05c86f1125
4 changed files with 83 additions and 23 deletions

View File

@@ -85,25 +85,9 @@
//// }
//// }
//
// @Test
// public void testFailsAboutExpected() {
// System.out.println(testASCIIHeader);
// System.out.println("Test - Player with 800 skill should fail about 20% of the time (100,000 iterations)");
// double ratioDivisor = 1000; //1000 because we run the test 100,000 times
// double expectedFailRate = 100.0D - 2.15D;
//
// double win = 0, loss = 0;
// for(int x = 0; x < 100000; x++) {
// if(RandomChanceUtil.checkRandomChanceExecutionSuccess(normalPlayer, SubSkillType.MINING_MOTHER_LODE, true)) {
// win++;
// } else {
// loss++;
// }
// }
//
// double lossRatio = (loss / ratioDivisor);
// Assert.assertEquals(lossRatio, expectedFailRate, 0.01D);
// }
//
//
// private double getSuccessChance(@NotNull McMMOPlayer mmoPlayer) {
// RandomChanceSkill randomChanceSkill = new RandomChanceSkill(mmoPlayer.getPlayer(), subSkillType, true);

View File

@@ -0,0 +1,76 @@
package com.gmail.nossr50.util.random;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.stream.Stream;
import static com.gmail.nossr50.util.random.RandomChanceUtil.processProbability;
import static org.junit.jupiter.api.Assertions.*;
class RandomChanceUtilTest {
private static Stream<Arguments> provideProbabilitiesForWithinExpectations() {
return Stream.of(
// static probability, % of time for success
Arguments.of(new ProbabilityImpl(5), 5),
Arguments.of(new ProbabilityImpl(10), 10),
Arguments.of(new ProbabilityImpl(15), 15),
Arguments.of(new ProbabilityImpl(20), 20),
Arguments.of(new ProbabilityImpl(25), 25),
Arguments.of(new ProbabilityImpl(50), 50),
Arguments.of(new ProbabilityImpl(75), 75),
Arguments.of(new ProbabilityImpl(90), 90),
Arguments.of(new ProbabilityImpl(99.9), 99.9),
Arguments.of(new ProbabilityImpl(0.05), 0.05),
Arguments.of(new ProbabilityImpl(0.1), 0.1),
Arguments.of(new ProbabilityImpl(500), 100),
Arguments.of(new ProbabilityImpl(1000), 100)
);
}
@Test
void testIsSuccessfulRollSucceeds() {
Probability probability = new ProbabilityImpl(100);
for (int i = 0; i < 100000; i++) {
assertTrue(processProbability(probability));
}
}
@Test
void testIsSuccessfulRollFails() {
Probability probability = new ProbabilityImpl(0);
for (int i = 0; i < 100000; i++) {
assertFalse(processProbability(probability));
}
}
@ParameterizedTest
@MethodSource("provideProbabilitiesForWithinExpectations")
void testProcessProbabilityWithinExpectations(Probability probability, double expectedWinPercent) {
// Probabilities are tested 200,000,000 times with a margin of error of 0.01%
int iterations = 200000000;
double winCount = 0;
for (int i = 0; i < iterations; i++) {
if(processProbability(probability)) {
winCount++;
}
}
double successPercent = (winCount / iterations) * 100;
System.out.println(successPercent + ", " + expectedWinPercent);
assertEquals(expectedWinPercent, successPercent, 0.01D);
}
@Test
void chanceOfSuccessPercentage() {
}
@Test
void testChanceOfSuccessPercentage() {
}
}