/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package de.randi2.core.unit.randomization;
import de.randi2.model.Trial;
import de.randi2.model.randomization.Block;
import de.randi2.model.randomization.BlockRandomizationConfig;
import de.randi2.randomization.BlockRandomization;
import java.util.Random;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import static org.junit.Assert.*;
import static de.randi2.testUtility.utility.RANDI2Assert.*;
import static de.randi2.utility.IntegerIterator.upto;
/**
*
* @author jthoenes
*/
public class BlockRandomizationInternalTest {
public BlockRandomizationInternalTest() { }
Trial trial;
BlockRandomizationTestable rand;
BlockRandomizationConfig conf;
Random random;
private class BlockRandomizationTestable extends BlockRandomization {
public BlockRandomizationTestable(Trial t){
super(t);
}
@Override
public int generateBlockSize(Random random){
return super.generateBlockSize(random);
}
@Override
public Block generateBlock(Random random, Block block) {
return super.generateBlock(random, block);
}
}
@Before
public void setUp(){
trial = new Trial();
conf = new BlockRandomizationConfig();
trial.setRandomizationConfiguration(conf);
rand = new BlockRandomizationTestable(trial);
random = new Random();
}
@Test
public void testBlockSizeMultiply1(){
conf.setType(BlockRandomizationConfig.TYPE.MULTIPLY);
conf.setMinimum(1);
conf.setMaximum(2);
RandomizationHelper.addArms(trial, 10, 10);
for(int i: upto(20)){
assertOneOf(new int[]{2}, rand.generateBlockSize(random));
assertNoOneOf(new int[]{1,3,4}, rand.generateBlockSize(random));
}
}
@Test
public void testBlockSizeMultiply2(){
conf.setType(BlockRandomizationConfig.TYPE.MULTIPLY);
conf.setMinimum(1);
conf.setMaximum(4);
RandomizationHelper.addArms(trial, 10, 10);
for(int i: upto(20)){
assertOneOf(new int[]{2,4}, rand.generateBlockSize(random));
assertNoOneOf(new int[]{1,3,5,6}, rand.generateBlockSize(random));
}
}
@Test
// @Ignore
public void testBlockSizeMultiply3(){
conf.setType(BlockRandomizationConfig.TYPE.MULTIPLY);
conf.setMinimum(5);
conf.setMaximum(20);
RandomizationHelper.addArms(trial, 40, 10);
for(int i: upto(20)){
assertOneOf(new int[]{5, 10, 15, 20}, rand.generateBlockSize(random));
assertNoOneOf(new int[]{1,2,3,4,6,7,8,9,11,12,13,14,16,17,18,19,21,25,30}, rand.generateBlockSize(random));
}
}
@Test
public void testBlockSizeMultiply4(){
conf.setType(BlockRandomizationConfig.TYPE.MULTIPLY);
conf.setMinimum(4);
conf.setMaximum(10);
RandomizationHelper.addArms(trial, 10, 20, 10);
for(int i: upto(20)){
assertOneOf(new int[]{4, 8}, rand.generateBlockSize(random));
}
}
@Test
public void testBlockSizeMultiply5(){
conf.setType(BlockRandomizationConfig.TYPE.MULTIPLY);
conf.setMinimum(5);
conf.setMaximum(5);
RandomizationHelper.addArms(trial, 10, 10, 10, 10, 10);
for(int i: upto(20)){
assertOneOf(new int[]{5}, rand.generateBlockSize(random));
}
}
@Test
public void testBlockSizeMultiply6(){
conf.setType(BlockRandomizationConfig.TYPE.MULTIPLY);
conf.setMinimum(2);
conf.setMaximum(2);
RandomizationHelper.addArms(trial, 40,40);
for(int i: upto(20)){
assertOneOf(new int[]{2}, rand.generateBlockSize(random));
}
}
@Test
public void testBlockSizeMultiply7(){
conf.setType(BlockRandomizationConfig.TYPE.MULTIPLY);
conf.setMinimum(2);
conf.setMaximum(20);
RandomizationHelper.addArms(trial, 40,40);
for(int i: upto(1000)){
assertOneOf(new int[]{2,4,6,8,10,12,14,16,18,20}, rand.generateBlockSize(random));
assertNoOneOf(new int[]{3,5,7,9,11,13,15,17,19}, rand.generateBlockSize(random));
}
}
}