package de.randi2.simulation.unit.model;
import java.io.Serializable;
import java.util.Arrays;
import org.junit.Test;
import de.randi2.model.criteria.DichotomousCriterion;
import de.randi2.model.criteria.constraints.DichotomousConstraint;
import de.randi2.simulation.distribution.UniformDistribution;
import de.randi2.unsorted.ConstraintViolatedException;
import static junit.framework.Assert.*;
public class DistributionSubjectPropertyTest {
@Test
public void testDistributionSubjectProperty(){
DichotomousCriterion dc = new DichotomousCriterion();
dc.setOption1("option1");
dc.setOption2("option2");
try {
dc.setStrata(Arrays.asList(new DichotomousConstraint(Arrays.asList(new String[]{"option1"})),new DichotomousConstraint(Arrays.asList(new String[]{"option2"}))));
} catch (ConstraintViolatedException e) {
fail();
}
UniformDistribution<DichotomousConstraint> distri = new UniformDistribution<DichotomousConstraint>(dc.getStrata());
double limit = 0.05;
int[] values = new int[2];
for(int i =0; i<100000;i++){
if(distri.getNextValue().getExpectedValue().equals("option1")){
values[0]++;
}else values[1]++;
}
for(int i : values){
double mean = (1.0 * i) / 100000;
assertTrue("error: " + mean +" > " +((0.5)-limit),(mean)>((0.5)-limit));
assertTrue("error: " + mean +" < " +((0.5)+limit),(mean)<((0.5)+limit));
}
}
}