package de.randi2.simulation.unit.distribution;
import static junit.framework.Assert.*;
import java.util.Arrays;
import org.junit.Test;
import de.randi2.simulation.distribution.UniformDistribution;
public class UniformDistributionTest {
private int runsPerEntry = 1000;
private double limit = 0.05;
private void testUniformDistribution(UniformDistribution<Integer> ud){
int runs = runsPerEntry*ud.getElements().size();
int[] values = new int[ud.getElements().size()];
for(int i =0; i<runs;i++){
values[ud.getNextValue()]++;
}
for(int i : values){
double mean = (1.0 * i) / runs;
assertTrue("error: " + mean +" > " +((1.0/ud.getElements().size())-limit),(mean)>((1.0/ud.getElements().size())-limit));
assertTrue("error: " + mean +" < " +((1.0/ud.getElements().size())+limit),(mean)<((1.0/ud.getElements().size())+limit));
}
}
@Test
public void test1000Times(){
for(int i=0; i<1000;i++){
testUniformDistribution(new UniformDistribution<Integer>(Arrays.asList(0,1,2,3,4,5)));
testUniformDistribution(new UniformDistribution<Integer>(Arrays.asList(0,1)));
testUniformDistribution(new UniformDistribution<Integer>(Arrays.asList(0,1,2,3)));
}
}
}