package com.plectix.simulator.perturbations.triggering; import static org.junit.Assert.fail; import java.io.File; import java.util.Collection; import java.util.List; import org.apache.commons.cli.ParseException; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import com.plectix.simulator.FileNameCollectionGenerator; import com.plectix.simulator.Initializator; import com.plectix.simulator.OperationModeCollectionGenerator; import com.plectix.simulator.controller.SimulatorInputData; import com.plectix.simulator.io.SimulationDataReader; import com.plectix.simulator.simulationclasses.perturbations.ComplexPerturbation; import com.plectix.simulator.simulationclasses.perturbations.ConditionInterface; import com.plectix.simulator.simulationclasses.perturbations.TimeCondition; import com.plectix.simulator.simulator.KappaSystem; import com.plectix.simulator.simulator.SimulationArguments; import com.plectix.simulator.simulator.SimulationData; import com.plectix.simulator.simulator.Simulator; import com.plectix.simulator.util.Info.InfoType; @RunWith(value = Parameterized.class) public class TestPerturbationsTriggering { private static final String separator = File.separator; private static final String testDirectory = "test.data" + separator + "perturbations" + separator + "triggering" + separator; private final String prefixFileName; private Simulator mySimulator; private final Integer[] times = { 200 }; private final Integer operationMode; @Parameters public static Collection<Object[]> data() { Collection<Object[]> coll = FileNameCollectionGenerator.getAllFileNames(testDirectory); return OperationModeCollectionGenerator.generate(coll,true); } public TestPerturbationsTriggering(String filename, Integer opMode) { prefixFileName = filename; operationMode = opMode; } @Test public void test() throws Exception { for (int i = 0; i < times.length; i++) { setup(times[i]); KappaSystem kappaSystem = mySimulator.getSimulationData() .getKappaSystem(); List<ComplexPerturbation<?, ?>> perturbations = kappaSystem.getPerturbations(); // check the perturbations have been triggered for (ComplexPerturbation<?, ?> perturbation : perturbations) { ConditionInterface condition = perturbation.getCondition(); if (condition instanceof TimeCondition) { double timeLimit = ((TimeCondition)condition).getTimeLimit(); boolean wasPerformed = perturbation.getModification().wasPerformed() ; if (!wasPerformed && timeLimit < times[i]) { fail("perturbation: $T > " + timeLimit + " has not been triggered"); } else if (wasPerformed && timeLimit > times[i]) fail("perturbation: $T > " + timeLimit + " has been triggered, but it must not to"); } } } } public void setup(Integer time) throws Exception { init(testDirectory + prefixFileName, time); try { mySimulator.run(new SimulatorInputData(mySimulator .getSimulationData().getSimulationArguments())); } catch (Exception e) { e.printStackTrace(); junit.framework.Assert.fail(e.getMessage()); } } public void init(String filePath, Integer time) throws Exception { mySimulator = null; mySimulator = new Simulator(); SimulationData simulationData = mySimulator.getSimulationData(); SimulationArguments args = null; try { args = Initializator.prepareTimeArguments(filePath, time, operationMode); } catch (ParseException e) { e.printStackTrace(); throw new IllegalArgumentException(e); } simulationData.setSimulationArguments(InfoType.OUTPUT, args); (new SimulationDataReader(simulationData)).readAndCompile(); simulationData.getKappaSystem().initialize(); } }