package com.plectix.simulator.rulestudio; import java.io.File; import junit.framework.Assert; import org.junit.Test; import com.plectix.simulator.controller.SimulatorInputData; import com.plectix.simulator.simulationclasses.solution.OperationMode; import com.plectix.simulator.simulator.KappaSystem; import com.plectix.simulator.simulator.SimulationArguments; import com.plectix.simulator.simulator.Simulator; import com.plectix.simulator.simulator.SimulatorCommandLine; import com.plectix.simulator.simulator.api.steps.CommandLineDefinedWorkflow; import com.plectix.simulator.simulator.api.steps.OperationManager; import com.plectix.simulator.util.io.XMLOutputOracle; public class TestRuleStudioOptionsSets { @Test public final void testSimulationA() { try { File xmlOutputFile = File.createTempFile("testOptionsSet", "test"); String kappaFile = "data" + File.separator + "example.ka"; KappaSystem kappaSystem = this.processCommandLine("--sim " + kappaFile + " --memory-limit 1024 --no-maps --event 1 --points 1000" + " --rescale 1.0 --xml-session-name " + xmlOutputFile.getPath() + " --clock-precision 50"); Assert.assertTrue("simulation plot contains no data", XMLOutputOracle.simulationPlotDataIsNotEmpty(kappaSystem)); Assert.assertFalse("Final state conains snapshots", XMLOutputOracle.finalStateDataIsNotEmpty(kappaSystem)); SimulationArguments arguments = kappaSystem.getSimulationData().getSimulationArguments(); checkSimulationArgumentsInCase1(arguments); Assert.assertTrue("Wrong output file path", arguments.getXmlOutputDestination().equals(xmlOutputFile.getPath())); } catch(Exception e) { e.printStackTrace(); Assert.fail(e.getMessage()); } } @Test public final void testSimulationB() { try { File xmlOutputFile = File.createTempFile("testOptionsSet", "test"); String kappaFile = "data" + File.separator + "example.ka"; KappaSystem kappaSystem = this.processCommandLine("--sim " + kappaFile + " --memory-limit 1024 --no-maps --event 1 --points 1000" + " --rescale 1.0 --xml-session-name " + xmlOutputFile.getPath() + " --clock-precision 50 --output-final-state"); Assert.assertTrue("simulation plot contains no data", XMLOutputOracle.simulationPlotDataIsNotEmpty(kappaSystem)); Assert.assertTrue("Final state conains no snapshots", XMLOutputOracle.finalStateDataIsNotEmpty(kappaSystem)); SimulationArguments arguments = kappaSystem.getSimulationData().getSimulationArguments(); Assert.assertTrue("Wrong rescale", Math.abs(arguments.getRescale() - 1) < 0.001); checkSimulationArgumentsInCase1(arguments); Assert.assertTrue("Wrong output file path", arguments.getXmlOutputDestination().equals(xmlOutputFile.getPath())); } catch(Exception e) { e.printStackTrace(); Assert.fail(e.getMessage()); } } private void checkSimulationArgumentsInCase1(SimulationArguments arguments) { Assert.assertTrue("Wrong rescale", Math.abs(arguments.getRescale() - 1) < 0.001); // memory limit cannot be set inside jsim Assert.assertTrue("Wrong events number", arguments.getMaxNumberOfEvents() == 1); Assert.assertTrue("Wrong points number", arguments.getPoints() == 1000); Assert.assertTrue("Wrong clock precision", arguments.getClockPrecision() == 50); Assert.assertFalse("Wrong simulation mode", arguments.isTime()); Assert.assertFalse("We calculate subviews", arguments.needToCreateSubViews()); } @Test public final void testStories() { try { File xmlOutputFile = File.createTempFile("testOptionsSet", "test"); String kappaFile = "data" + File.separator + "ex_stories.ka"; KappaSystem kappaSystem = this.processCommandLine("--storify " + kappaFile + " --compress-stories --use-strong-compression --iteration 10" + " --memory-limit 1024 --no-maps --time 10" + " --xml-session-name " + xmlOutputFile.getPath() + " --clock-precision 50"); Assert.assertFalse("Final state conains snapshots", XMLOutputOracle.finalStateDataIsNotEmpty(kappaSystem)); Assert.assertTrue("There are no stories sections", XMLOutputOracle.storiesDataIsNotEmpty(kappaSystem)); SimulationArguments arguments = kappaSystem.getSimulationData().getSimulationArguments(); Assert.assertTrue("Wrong output file path", arguments.getXmlOutputDestination().equals(xmlOutputFile.getPath())); Assert.assertTrue("Wrong time limit number", Math.abs(arguments.getTimeLimit() - 10) < 0.1); Assert.assertFalse("We calculate subviews", arguments.needToCreateSubViews()); Assert.assertTrue("Wrong simulation mode", arguments.needToStorify()); Assert.assertTrue("Wrong iterations number", arguments.getIterations() == 10); } catch(Exception e) { e.printStackTrace(); Assert.fail(e.getMessage()); } } @Test public final void testLiveDataA() { try { File xmlOutputFile = File.createTempFile("testOptionsSet", "test"); String kappaFile = "data" + File.separator + "easy-egfr.ka"; KappaSystem kappaSystem = this.processCommandLine("--sim " + kappaFile + " --operation-mode 1 --time 0.0001 --points 120" + " --xml-session-name " + xmlOutputFile + " --live-data-interval 12 --live-data-points 1"); Assert.assertTrue("simulation plot contains no data", XMLOutputOracle.simulationPlotDataIsNotEmpty(kappaSystem)); SimulationArguments arguments = kappaSystem.getSimulationData().getSimulationArguments(); Assert.assertTrue("Wrong output file path", arguments.getXmlOutputDestination().equals(xmlOutputFile.getPath())); Assert.assertTrue("Wrong time limit number", Math.abs(arguments.getTimeLimit() - 0.0001) < 0.001); checkSimulationArgumentsInCase3(arguments); } catch(Exception e) { e.printStackTrace(); Assert.fail(e.getMessage()); } } @Test public final void testLiveDataB() { try { File xmlOutputFile = File.createTempFile("testOptionsSet", "test"); String kappaFile = "data" + File.separator + "easy-egfr.ka"; KappaSystem kappaSystem = this.processCommandLine("--sim " + kappaFile + " --operation-mode 1 --event 35 --points 120" + " --xml-session-name " + xmlOutputFile + " --live-data-interval 12 --live-data-points 1"); Assert.assertTrue("simulation plot contains no data", XMLOutputOracle.simulationPlotDataIsNotEmpty(kappaSystem)); SimulationArguments arguments = kappaSystem.getSimulationData().getSimulationArguments(); Assert.assertTrue("Wrong output file path", arguments.getXmlOutputDestination().equals(xmlOutputFile.getPath())); Assert.assertTrue("Wrong time limit number", arguments.getMaxNumberOfEvents() == 35); checkSimulationArgumentsInCase3(arguments); } catch(Exception e) { e.printStackTrace(); Assert.fail(e.getMessage()); } } private void checkSimulationArgumentsInCase3(SimulationArguments arguments) { Assert.assertTrue("Wrong simulation mode", arguments.getOperationMode().equals(OperationMode.FIRST)); Assert.assertTrue("Wrong points number", arguments.getPoints() == 120); Assert.assertTrue("Wrong live data interval", arguments.getLiveDataInterval() == 12); Assert.assertTrue("Wrong live data points", arguments.getLiveDataPoints() == 1); Assert.assertTrue("Wrong simulation mode", arguments.needToSimulate()); } //TODO implement --output-*** options // @Test // public final void testCaseQualitativeCompression() { // try { // File xmlOutputFile = File.createTempFile("testOptionsSet", "test"); // String kappaFile = "data" + File.separator + "abc2.ka"; // KappaSystem kappaSystem = this.processCommandLine("--build-influence-map" // + " --no-dump-iteration-number" // + " --no-dump-rule-iteration" // + " --no-enumerate-complexes" // + " --contact-map " + kappaFile // + " --output-qualitative-compression " + xmlOutputFile // + " --xml-session-name " + xmlOutputFile); // // Assert.assertFalse("simulation plot contains no data", // XMLOutputOracle.simulationPlotDataIsNotEmpty(kappaSystem)); // // SimulationArguments arguments = kappaSystem.getSimulationData().getSimulationArguments(); // Assert.assertTrue("Wrong output file path", // arguments.getXmlOutputDestination().equals(xmlOutputFile.getPath())); // Assert.assertTrue("We do not compress rules", arguments.needToRunQualitativeCompression()); // Assert.assertFalse("We do wrong compression", arguments.needToRunQuantitativeCompression()); // } catch(Exception e) { // e.printStackTrace(); // Assert.fail(e.getMessage()); // } // } // // TODO implement --output-*** options // @Test // public final void testCaseQuantitativeCompression() { // try { // File xmlOutputFile = File.createTempFile("testOptionsSet", "test"); // String kappaFile = "data" + File.separator + "abc2.ka"; // KappaSystem kappaSystem = this.processCommandLine("--build-influence-map" // + " --no-dump-iteration-number" // + " --no-dump-rule-iteration" // + " --no-enumerate-complexes" // + " --contact-map " + kappaFile // + " --output-quantitative-compression " + xmlOutputFile // + " --xml-session-name " + xmlOutputFile); // // Assert.assertFalse("simulation plot contains no data", // XMLOutputOracle.simulationPlotDataIsNotEmpty(kappaSystem)); // // SimulationArguments arguments = kappaSystem.getSimulationData().getSimulationArguments(); // Assert.assertTrue("Wrong output file path", // arguments.getXmlOutputDestination().equals(xmlOutputFile.getPath())); // Assert.assertFalse("We do wrong compression", arguments.needToRunQualitativeCompression()); // Assert.assertTrue("We do not compress rules", arguments.needToRunQuantitativeCompression()); // } catch(Exception e) { // e.printStackTrace(); // Assert.fail(e.getMessage()); // } //} @Test public final void testCaseContactMap() { try { File xmlOutputFile = File.createTempFile("testOptionsSet", "test"); String kappaFile = "data" + File.separator + "example.ka"; KappaSystem kappaSystem = this.processCommandLine( "--no-build-influence-map", "--no-compute-qualitative-compression", "--no-compute-quantitative-compression", "--no-dump-iteration-number", "--no-dump-rule-iteration", "--no-enumerate-complexes", "--contact-map", kappaFile, "--xml-session-name", xmlOutputFile.getPath()); Assert.assertFalse("simulation plot contains no data", XMLOutputOracle.simulationPlotDataIsNotEmpty(kappaSystem)); SimulationArguments arguments = kappaSystem.getSimulationData().getSimulationArguments(); Assert.assertTrue("Wrong output file path", arguments.getXmlOutputDestination().equals(xmlOutputFile.getPath())); Assert.assertFalse("We enumerate complexes", arguments.needToEnumerationOfSpecies()); Assert.assertFalse("We compress rules", arguments.needToRunQuantitativeCompression()); Assert.assertFalse("We compress rules", arguments.needToRunQualitativeCompression()); Assert.assertFalse("We do not build influence map", arguments.needToBuildInfluenceMap()); Assert.assertTrue("We do not build contact map", arguments.needToBuildContactMap()); Assert.assertTrue("Wrong simulation mode", arguments.needToBuildContactMap()); } catch(Exception e) { e.printStackTrace(); Assert.fail(e.getMessage()); } } @Test public final void testCaseInfluenceMap() { try { File xmlOutputFile = File.createTempFile("testOptionsSet", "test"); String kappaFile = "data" + File.separator + "example.ka"; KappaSystem kappaSystem = this.processCommandLine( "--no-compute-qualitative-compression", "--no-compute-quantitative-compression", "--no-dump-iteration-number", "--no-dump-rule-iteration", "--no-enumerate-complexes", "--contact-map", kappaFile, "--xml-session-name", xmlOutputFile.getPath(), "--build-influence-map" ); Assert.assertFalse("simulation plot contains no data", XMLOutputOracle.simulationPlotDataIsNotEmpty(kappaSystem)); SimulationArguments arguments = kappaSystem.getSimulationData().getSimulationArguments(); Assert.assertTrue("Wrong output file path", arguments.getXmlOutputDestination().equals(xmlOutputFile.getPath())); Assert.assertFalse("We enumerate complexes", arguments.needToEnumerationOfSpecies()); Assert.assertFalse("We compress rules", arguments.needToRunQuantitativeCompression()); Assert.assertFalse("We compress rules", arguments.needToRunQualitativeCompression()); Assert.assertTrue("We do not build influence map", arguments.needToBuildInfluenceMap()); Assert.assertTrue("We do not build contact map", arguments.needToBuildContactMap()); Assert.assertTrue("Wrong simulation mode", arguments.needToBuildContactMap()); } catch(Exception e) { e.printStackTrace(); Assert.fail(e.getMessage()); } } @Test public final void testCaseReachables() { try { String kappaFile = "data" + File.separator + "example.ka"; KappaSystem kappaSystem = this.processCommandLine( "--contact-map", kappaFile, "--compute-local-views"); Assert.assertFalse("simulation plot contains no data", XMLOutputOracle.simulationPlotDataIsNotEmpty(kappaSystem)); SimulationArguments arguments = kappaSystem.getSimulationData().getSimulationArguments(); Assert.assertTrue("We do not compute local views", arguments.needToCreateLocalViews()); Assert.assertTrue("We do not build contact map", arguments.needToBuildContactMap()); Assert.assertFalse("We do enumerate species", arguments.needToEnumerationOfSpecies()); } catch(Exception e) { e.printStackTrace(); Assert.fail(e.getMessage()); } } @Test public final void testCaseEnumerating() { try { String kappaFile = "data" + File.separator + "example.ka"; KappaSystem kappaSystem = this.processCommandLine( "--contact-map", kappaFile, "--compute-local-views", "--enumerate-complexes"); Assert.assertFalse("simulation plot contains no data", XMLOutputOracle.simulationPlotDataIsNotEmpty(kappaSystem)); SimulationArguments arguments = kappaSystem.getSimulationData().getSimulationArguments(); Assert.assertTrue("We do not compute local views", arguments.needToCreateLocalViews()); Assert.assertTrue("We do not build contact map", arguments.needToBuildContactMap()); Assert.assertTrue("We do not enumerate species", arguments.needToEnumerationOfSpecies()); } catch(Exception e) { e.printStackTrace(); Assert.fail(e.getMessage()); } } @Test public final void testCaseCompilation() { try { String kappaFile = "data" + File.separator + "example.ka"; KappaSystem kappaSystem = this.processCommandLine( "--compile", kappaFile); Assert.assertFalse("simulation plot contains no data", XMLOutputOracle.simulationPlotDataIsNotEmpty(kappaSystem)); SimulationArguments arguments = kappaSystem.getSimulationData().getSimulationArguments(); Assert.assertTrue("We do not compile", arguments.needToCompile()); Assert.assertFalse("We simulate", arguments.needToSimulate()); Assert.assertFalse("We compute stories", arguments.needToStorify()); Assert.assertFalse("We compute contact map", arguments.needToBuildContactMap()); } catch(Exception e) { e.printStackTrace(); Assert.fail(e.getMessage()); } } private KappaSystem processCommandLine(String commandLine) throws Exception { return this.processCommandLine(commandLine.split(" ")); } private KappaSystem processCommandLine(String...commandLine) throws Exception { Simulator simulator = new Simulator(); SimulatorCommandLine simulatorCommandLine = new SimulatorCommandLine(commandLine); SimulationArguments arguments = simulatorCommandLine.getSimulationArguments(); SimulatorInputData inputData = new SimulatorInputData(arguments); KappaSystem kappaSystem = simulator.getSimulationData().getKappaSystem(); OperationManager manager = kappaSystem.getOperationManager(); manager.perform(new CommandLineDefinedWorkflow(simulator, inputData)); return kappaSystem; } }