package de.randi2.simulation.unit.model; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.junit.Test; import de.randi2.model.TreatmentArm; import de.randi2.simulation.model.SimulationResult; import de.randi2.simulation.model.SimulationRun; import static junit.framework.Assert.*; public class SimulationResultTest { @Test public void testDuration(){ List<TreatmentArm> arms = new ArrayList<TreatmentArm>(); TreatmentArm arm1 = new TreatmentArm(); arm1.setPlannedSubjects(100); TreatmentArm arm2 = new TreatmentArm(); arm2.setPlannedSubjects(100); arms.add(arm1); arms.add(arm2); SimulationResult simResult = new SimulationResult(arms, null, new HashMap<String, String>()); for(int i = 0; i<1000;i++){ SimulationRun run = new SimulationRun(new int[]{100,100}, arms, new HashMap<String, String>()); run.setTime(10L); simResult.addSimulationRun(run); } assertEquals(10, simResult.getDuration()); simResult = new SimulationResult(arms, null, new HashMap<String, String>()); for(long i = 1; i<1001;i++){ SimulationRun run = new SimulationRun(new int[]{100,100}, arms, new HashMap<String, String>()); run.setTime(i); simResult.addSimulationRun(run); } assertEquals(500, simResult.getDuration()); } @Test public void testMarginalBalance(){ List<TreatmentArm> arms = new ArrayList<TreatmentArm>(); TreatmentArm arm1 = new TreatmentArm(); arm1.setPlannedSubjects(100); TreatmentArm arm2 = new TreatmentArm(); arm2.setPlannedSubjects(100); arms.add(arm1); arms.add(arm2); HashMap<String, String> map = new HashMap<String, String>(); SimulationResult simResult = new SimulationResult(arms, null, map); SimulationRun simRun = new SimulationRun(new int[] { 20, 20 }, arms, map); simRun.setSubjectsPerArms(new int[] { 8, 22 }); double roundedResult = Math .round((simRun.getMarginalBalace() * 100000.0)) / 100000.0; assertEquals(roundedResult, 0.46667); simRun.setTime(10l); simResult.addSimulationRun(simRun); simRun = new SimulationRun(new int[] { 20, 20 }, arms, map); simRun.setSubjectsPerArms(new int[] { 11, 29 }); roundedResult = Math .round((simRun.getMarginalBalace() * 100000.0)) / 100000.0; assertEquals(roundedResult, 0.45); simRun.setTime(10l); simResult.addSimulationRun(simRun); simRun = new SimulationRun(new int[] { 20, 20 }, arms, map); simRun.setSubjectsPerArms(new int[] { 20, 20 }); roundedResult = Math .round((simRun.getMarginalBalace() * 100000.0)) / 100000.0; assertEquals(roundedResult, 0.0); simRun.setTime(10l); simResult.addSimulationRun(simRun); simRun = new SimulationRun(new int[] { 20, 20 }, arms, map); simRun.setSubjectsPerArms(new int[] { 21, 19 }); roundedResult = Math .round((simRun.getMarginalBalace() * 100000.0)) / 100000.0; assertEquals(roundedResult, 0.05); simRun.setTime(10l); simResult.addSimulationRun(simRun); simRun = new SimulationRun(new int[] { 20, 20 }, arms, map); simRun.setSubjectsPerArms(new int[] { 15, 25 }); roundedResult = Math .round((simRun.getMarginalBalace() * 100000.0)) / 100000.0; assertEquals(roundedResult, 0.25); simRun.setTime(10l); simResult.addSimulationRun(simRun); simRun = new SimulationRun(new int[] { 20, 20 }, arms, map); simRun.setSubjectsPerArms(new int[] { 23, 17 }); roundedResult = Math .round((simRun.getMarginalBalace() * 100000.0)) / 100000.0; assertEquals(roundedResult, 0.15); simRun.setTime(10l); simResult.addSimulationRun(simRun); assertEquals(0.0, simResult.getMarginalBalanceMin()); roundedResult = Math .round((simResult.getMarginalBalanceMax() * 100000.0)) / 100000.0;; assertEquals(0.46667, roundedResult); roundedResult = Math .round((simResult.getMarginalBalanceMean() * 100000.0)) / 100000.0;; assertEquals(0.22778, roundedResult); } @Test public void testSubjectCounts(){ List<TreatmentArm> arms = new ArrayList<TreatmentArm>(); TreatmentArm arm1 = new TreatmentArm(); arm1.setPlannedSubjects(100); TreatmentArm arm2 = new TreatmentArm(); arm2.setPlannedSubjects(100); arms.add(arm1); arms.add(arm2); HashMap<String, String> map = new HashMap<String, String>(); SimulationResult simResult = new SimulationResult(arms, null, map); SimulationRun simRun = new SimulationRun(new int[] { 20, 20 }, arms, map); simRun.setSubjectsPerArms(new int[] { 8, 22 }); double roundedResult = Math .round((simRun.getMarginalBalace() * 100000.0)) / 100000.0; assertEquals(roundedResult, 0.46667); simRun.setTime(10l); simResult.addSimulationRun(simRun); simRun = new SimulationRun(new int[] { 20, 20 }, arms, map); simRun.setSubjectsPerArms(new int[] { 11, 29 }); roundedResult = Math .round((simRun.getMarginalBalace() * 100000.0)) / 100000.0; assertEquals(roundedResult, 0.45); simRun.setTime(10l); simResult.addSimulationRun(simRun); simRun = new SimulationRun(new int[] { 20, 20 }, arms, map); simRun.setSubjectsPerArms(new int[] { 20, 20 }); roundedResult = Math .round((simRun.getMarginalBalace() * 100000.0)) / 100000.0; assertEquals(roundedResult, 0.0); simRun.setTime(10l); simResult.addSimulationRun(simRun); simRun = new SimulationRun(new int[] { 20, 20 }, arms, map); simRun.setSubjectsPerArms(new int[] { 21, 19 }); roundedResult = Math .round((simRun.getMarginalBalace() * 100000.0)) / 100000.0; assertEquals(roundedResult, 0.05); simRun.setTime(10l); simResult.addSimulationRun(simRun); simRun = new SimulationRun(new int[] { 20, 20 }, arms, map); simRun.setSubjectsPerArms(new int[] { 15, 25 }); roundedResult = Math .round((simRun.getMarginalBalace() * 100000.0)) / 100000.0; assertEquals(roundedResult, 0.25); simRun.setTime(10l); simResult.addSimulationRun(simRun); simRun = new SimulationRun(new int[] { 20, 20 }, arms, map); simRun.setSubjectsPerArms(new int[] { 23, 17 }); roundedResult = Math .round((simRun.getMarginalBalace() * 100000.0)) / 100000.0; assertEquals(roundedResult, 0.15); simRun.setTime(10l); simResult.addSimulationRun(simRun); simResult.analyze(); assertEquals(8, simResult.getSimResultArms().get(0).getMin()); assertEquals(23, simResult.getSimResultArms().get(0).getMax()); assertEquals(20.0, simResult.getSimResultArms().get(0).getMedian()); roundedResult = Math .round((simResult.getSimResultArms().get(0).getMean() * 100000.0)) / 100000.0;; assertEquals(16.33333, roundedResult); assertEquals(17, simResult.getSimResultArms().get(1).getMin()); assertEquals(29, simResult.getSimResultArms().get(1).getMax()); assertEquals(23.0, simResult.getSimResultArms().get(1).getMedian()); roundedResult = Math .round((simResult.getSimResultArms().get(1).getMean() * 100000.0)) / 100000.0;; assertEquals(22.0, roundedResult); } }