/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package de.randi2.core.unit.randomization;
import static de.randi2.core.unit.randomization.RandomizationHelper.randomize;
import static de.randi2.testUtility.utility.RANDI2Assert.assertAtLeast;
import static de.randi2.testUtility.utility.RANDI2Assert.assertAtMost;
import static de.randi2.utility.IntegerIterator.upto;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import de.randi2.model.TreatmentArm;
import de.randi2.model.Trial;
import de.randi2.model.TrialSubject;
import de.randi2.model.randomization.Block;
import de.randi2.model.randomization.BlockRandomizationConfig;
import de.randi2.model.randomization.BlockRandomizationTempData;
/**
*
* @author jthoenes
*/
public class BlockRandomizationTest {
private Trial trial;
private TrialSubject s;
private BlockRandomizationConfig conf;
@Before
public void setUp() {
trial = new Trial();
conf = new BlockRandomizationConfig();
trial.setRandomizationConfiguration(conf);
}
@Ignore
public void testOneSubjectAllocation() {
RandomizationHelper.addArms(trial, 10, 10);
conf.setMinimum(2);
conf.setMaximum(2);
conf.setType(BlockRandomizationConfig.TYPE.MULTIPLY);
s = new TrialSubject();
randomize(trial, s);
assertNotNull(s.getArm());
assertTrue(trial.getSubjects().contains(s));
}
@Ignore
public void testFourSubjectAllocations() {
RandomizationHelper.addArms(trial, 40, 40);
conf.setMinimum(2);
conf.setMaximum(2);
conf.setType(BlockRandomizationConfig.TYPE.MULTIPLY);
for (int i : upto(4)) {
s = new TrialSubject();
randomize(trial, s);
}
for (TreatmentArm arm : trial.getTreatmentArms()) {
assertEquals(2, arm.getSubjects().size());
}
}
@Test
public void testFourHundretAllocations() {
RandomizationHelper.addArms(trial, 400, 400);
conf.setMinimum(2);
conf.setMaximum(2);
conf.setType(BlockRandomizationConfig.TYPE.MULTIPLY);
for (int i : upto(400)) {
s = new TrialSubject();
randomize(trial, s);
}
for (TreatmentArm arm : trial.getTreatmentArms()) {
assertEquals(200, arm.getSubjects().size());
}
}
@Ignore
public void testFourHundretAllocations2() {
RandomizationHelper.addArms(trial, 400, 400);
conf.setMinimum(1);
conf.setMaximum(2);
conf.setType(BlockRandomizationConfig.TYPE.MULTIPLY);
for (int i : upto(400)) {
s = new TrialSubject();
randomize(trial, s);
}
for (TreatmentArm arm : trial.getTreatmentArms()) {
assertAtLeast(199, arm.getSubjects().size());
assertAtMost(201, arm.getSubjects().size());
}
}
@Test
public void testVaryingAllocation() {
RandomizationHelper.addArms(trial, 20, 20);
conf.setMinimum(15);
conf.setMaximum(20);
conf.setType(BlockRandomizationConfig.TYPE.ABSOLUTE);
for (int i : upto(20)) {
s = new TrialSubject();
randomize(trial, s);
}
for (TreatmentArm arm : trial.getTreatmentArms()) {
assertAtLeast(7, arm.getSubjects().size());
assertAtMost(13, arm.getSubjects().size());
}
}
@Test
public void testMultiplyBlocks() {
RandomizationHelper.addArms(trial, 400, 400);
conf.setMinimum(4);
conf.setMaximum(12);
conf.setType(BlockRandomizationConfig.TYPE.MULTIPLY);
int blocksize = 0;
for (int i : upto(400)) {
s = new TrialSubject();
BlockRandomizationConfig config = (BlockRandomizationConfig) trial
.getRandomizationConfiguration();
BlockRandomizationTempData tempData = (BlockRandomizationTempData) config
.getTempData();
if (tempData.getBlocks().keySet().iterator().hasNext()) {
if (blocksize < 0) {
Block block = tempData.getBlocks().get(
tempData.getBlocks().keySet().iterator().next());
blocksize = block.getBlock().size();
// 3, 5, 7, 9, 11 because the first patient of the block is
// already randomized
assertTrue(blocksize == 3 || blocksize == 5
|| blocksize == 7 || blocksize == 9
|| blocksize == 11);
}
}
randomize(trial, s);
blocksize--;
}
}
}