diff --git a/src/main/java/avatartranslator/directsimulation/AvatarSpecificationSimulation.java b/src/main/java/avatartranslator/directsimulation/AvatarSpecificationSimulation.java index 6f45749f49355327c61b2517ad2395594007f234..c6ead34eba5b63aa85b43e8c2f55b456012d1656 100644 --- a/src/main/java/avatartranslator/directsimulation/AvatarSpecificationSimulation.java +++ b/src/main/java/avatartranslator/directsimulation/AvatarSpecificationSimulation.java @@ -146,6 +146,10 @@ public class AvatarSpecificationSimulation { return allTransactions; } + public void removeAllTransactions() { + allTransactions.removeAll(allTransactions); + } + public long getClockValue() { return clockValue; } diff --git a/src/main/java/ui/avatarinteractivesimulation/AvatarInteractiveSimulationActions.java b/src/main/java/ui/avatarinteractivesimulation/AvatarInteractiveSimulationActions.java index 12b41f0ebdc26dabafcc4982e5df2a3d5a20348c..ae9950ed37186e9eb5f037c0e9a73c965886efdb 100755 --- a/src/main/java/ui/avatarinteractivesimulation/AvatarInteractiveSimulationActions.java +++ b/src/main/java/ui/avatarinteractivesimulation/AvatarInteractiveSimulationActions.java @@ -103,7 +103,8 @@ public class AvatarInteractiveSimulationActions extends AbstractAction { public static final int ACT_UP_ASYNC_MSG = 33; public static final int ACT_DOWN_ASYNC_MSG = 34; public static final int ACT_ADD_LATENCY = 35; - public static final int NB_ACTION = 36; + public static final int ACT_REMOVE_ALL_TRANS = 36; + public static final int NB_ACTION = 37; private static final TAction[] actions = new TAction[NB_ACTION]; @@ -149,6 +150,7 @@ public class AvatarInteractiveSimulationActions extends AbstractAction { actions[ACT_RUN_TO_TIME] = new TAction("run-to-time", "Run to time x", IconManager.imgic1304, IconManager.imgic1304, "Run to time x", "Run simulation until time x is reached. Works only if the simulator is \"ready\"", 'R'); actions[ACT_RUN_X_TRANSACTIONS] = new TAction("run-x-transactions", "Run x transactions", IconManager.imgic1306, IconManager.imgic1306, "Run x transactions", "Run simulation for x transactions. Works only if the simulator is \"ready\"", 'R'); actions[ACT_RUN_X_COMMANDS] = new TAction("run-x-commands", "x Step-by-Step", IconManager.imgic1330, IconManager.imgic1330, "x Step-by-Step", "Run simulation for x commands. Works only if the simulator is \"ready\"", 'R'); + actions[ACT_REMOVE_ALL_TRANS] = new TAction("remove-all-trans","Remove all transactions",IconManager.imgic337, IconManager.imgic337,"Remove all transactions", "Remove all the transactions stored in transaction list", 'R'); actions[ACT_BACK_ONE] = new TAction("back-one", "Back one transaction", IconManager.imgic47, IconManager.imgic47, "Back one transaction", "Go one transaction backward", 'B'); diff --git a/src/main/java/ui/avatarinteractivesimulation/AvatarMainCommandsToolBar.java b/src/main/java/ui/avatarinteractivesimulation/AvatarMainCommandsToolBar.java index 004d0e29f28af9adad965dab91f6519b2d19a3fc..8e85491cf542a0187cbbc614928a7b472b5686cd 100755 --- a/src/main/java/ui/avatarinteractivesimulation/AvatarMainCommandsToolBar.java +++ b/src/main/java/ui/avatarinteractivesimulation/AvatarMainCommandsToolBar.java @@ -75,6 +75,7 @@ public class AvatarMainCommandsToolBar extends AvatarInteractiveSimulationBar { jfais.actions[AvatarInteractiveSimulationActions.ACT_STOP_SIMU].setEnabled(b); jfais.actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].setEnabled(b); jfais.actions[AvatarInteractiveSimulationActions.ACT_RUN_X_COMMANDS].setEnabled(b); + jfais.actions[AvatarInteractiveSimulationActions.ACT_REMOVE_ALL_TRANS].setEnabled(b); @@ -86,6 +87,9 @@ public class AvatarMainCommandsToolBar extends AvatarInteractiveSimulationBar { button = this.add(jfais.actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU]); button.addMouseListener(jfais.mouseHandler); + button = this.add(jfais.actions[AvatarInteractiveSimulationActions.ACT_REMOVE_ALL_TRANS]); + button.addMouseListener(jfais.mouseHandler); + this.addSeparator(); button = this.add(jfais.actions[AvatarInteractiveSimulationActions.ACT_BACK_ONE]); diff --git a/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java b/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java index 26b722873b67a8974fd87d667edaa0577616aa49..060fd547cd80d8c57ae55b58676278637bffd57c 100755 --- a/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java +++ b/src/main/java/ui/avatarinteractivesimulation/JFrameAvatarInteractiveSimulation.java @@ -1247,6 +1247,7 @@ public class JFrameAvatarInteractiveSimulation extends JFrame implements AvatarS actions[AvatarInteractiveSimulationActions.ACT_BACK_ONE].setEnabled(true); actions[AvatarInteractiveSimulationActions.ACT_RUN_X_COMMANDS].setEnabled(true); actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].setEnabled(true); + actions[AvatarInteractiveSimulationActions.ACT_REMOVE_ALL_TRANS].setEnabled(true); actions[AvatarInteractiveSimulationActions.ACT_STOP_SIMU].setEnabled(false); b = true; @@ -1257,6 +1258,7 @@ public class JFrameAvatarInteractiveSimulation extends JFrame implements AvatarS actions[AvatarInteractiveSimulationActions.ACT_BACK_ONE].setEnabled(false); actions[AvatarInteractiveSimulationActions.ACT_RUN_X_COMMANDS].setEnabled(false); actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].setEnabled(false); + actions[AvatarInteractiveSimulationActions.ACT_REMOVE_ALL_TRANS].setEnabled(false); actions[AvatarInteractiveSimulationActions.ACT_STOP_SIMU].setEnabled(true); b = false; break; @@ -1265,6 +1267,7 @@ public class JFrameAvatarInteractiveSimulation extends JFrame implements AvatarS actions[AvatarInteractiveSimulationActions.ACT_BACK_ONE].setEnabled(true); actions[AvatarInteractiveSimulationActions.ACT_RUN_X_COMMANDS].setEnabled(false); actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].setEnabled(true); + actions[AvatarInteractiveSimulationActions.ACT_REMOVE_ALL_TRANS].setEnabled(true); actions[AvatarInteractiveSimulationActions.ACT_STOP_SIMU].setEnabled(false); b = true; break; @@ -1275,6 +1278,7 @@ public class JFrameAvatarInteractiveSimulation extends JFrame implements AvatarS actions[AvatarInteractiveSimulationActions.ACT_BACK_ONE].setEnabled(false); actions[AvatarInteractiveSimulationActions.ACT_RUN_X_COMMANDS].setEnabled(false); actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].setEnabled(true); + actions[AvatarInteractiveSimulationActions.ACT_REMOVE_ALL_TRANS].setEnabled(true); actions[AvatarInteractiveSimulationActions.ACT_STOP_SIMU].setEnabled(false); b = true; break; @@ -2103,6 +2107,10 @@ public class JFrameAvatarInteractiveSimulation extends JFrame implements AvatarS } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_RESET_SIMU].getActionCommand())) { resetSimulation(); + } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_REMOVE_ALL_TRANS].getActionCommand())) { + if (ass != null) { + ass.removeAllTransactions(); + } } else if (command.equals(actions[AvatarInteractiveSimulationActions.ACT_STOP_AND_CLOSE_ALL].getActionCommand())) { close(); return; diff --git a/src/main/java/ui/interactivesimulation/InteractiveSimulationActions.java b/src/main/java/ui/interactivesimulation/InteractiveSimulationActions.java index a8f1487f8e64f5ad8fa97a510c8eae99eaa9bc6b..ed9ed4ee53a70e55db846fcfc7dbdf93fbe583d6 100755 --- a/src/main/java/ui/interactivesimulation/InteractiveSimulationActions.java +++ b/src/main/java/ui/interactivesimulation/InteractiveSimulationActions.java @@ -159,7 +159,7 @@ public class InteractiveSimulationActions extends AbstractAction { actions[ACT_RUN_TO_TIME] = new TAction("run-to-time", "Run to time x", IconManager.imgic1304, IconManager.imgic1304, "Run to time x", "Run simulation until time x is reached. Works only if the simulator is \"ready\"", 'R'); actions[ACT_RUN_X_TRANSACTIONS] = new TAction("run-x-transactions", "Run x transactions", IconManager.imgic1306, IconManager.imgic1306, "Run x transactions", "Run simulation for x transactions. Works only if the simulator is \"ready\"", 'R'); actions[ACT_RUN_X_COMMANDS] = new TAction("run-x-commands", "Run x commands", IconManager.imgic1308, IconManager.imgic1308, "Run x commands", "Run simulation for x commands. Works only if the simulator is \"ready\"", 'R'); - actions[ACT_REMOVE_ALL_TRANS] = new TAction("remove-all-trans","Remove all transactions",IconManager.imgic337, IconManager.imgic337,"Remove all transactions", "Remove all the transactions stored before", 'R'); + actions[ACT_REMOVE_ALL_TRANS] = new TAction("remove-all-trans","Remove all transactions",IconManager.imgic337, IconManager.imgic337,"Remove all transactions", "Remove all the transactions stored in transaction list", 'R'); actions[ACT_RUN_EXPLORATION] = new TAction("run-exploration", "Run exploration", IconManager.imgic1326, IconManager.imgic1326, "Run exploration", "Explore branches of the simulation", 'R'); actions[ACT_RUN_TO_NEXT_BUS_TRANSFER] = new TAction("run-until-bus-transfer", "Run until bus transfer", IconManager.imgic1316, IconManager.imgic1316, "Run until transfer on bus", "Run until a transfer on the indicated bus is performed. Works only if the simulator is \"ready\"", 'R'); diff --git a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java index de314c73b8c472a896e029df72509e6804bc2441..4ce4bc45976665028e780d359def98453ffccad7 100644 --- a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java +++ b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java @@ -2359,8 +2359,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene TMLArchiCPUNode tmpcpu = (TMLArchiCPUNode) tg; for (int i = 0; i < trans.size(); i++) { String temp = trans.get(i).deviceName; - temp = temp.substring(0, temp.indexOf("_")); - if (tg.getName().equals(temp)) { + if (temp.contains(tg.getName())) { _trans.add(trans.elementAt(i)); } } @@ -3481,7 +3480,6 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene askForUpdate(); } else if (command.equals(actions[InteractiveSimulationActions.ACT_REMOVE_ALL_TRANS].getActionCommand())) { sendCommand("rmat 1"); - updateTransactions(); if(taskTransactionPanel != null) { taskTransactionPanel.resetTable(); @@ -3507,7 +3505,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene break; } } - + updateTransactions(); } else if (command.equals(actions[InteractiveSimulationActions.ACT_STOP_SIMU].getActionCommand())) { sendCommand("stop"); } else if (command.equals(actions[InteractiveSimulationActions.ACT_UPDATE_VARIABLES].getActionCommand())) { diff --git a/src/main/java/ui/interactivesimulation/TaskTransactionTableModel.java b/src/main/java/ui/interactivesimulation/TaskTransactionTableModel.java index 182c04d3a02a7eb8294c3ccdb00df6dbdb4a807a..9712dd4fdefc6744149cc432b290bfb675dca2a2 100644 --- a/src/main/java/ui/interactivesimulation/TaskTransactionTableModel.java +++ b/src/main/java/ui/interactivesimulation/TaskTransactionTableModel.java @@ -80,16 +80,19 @@ public class TaskTransactionTableModel extends AbstractTableModel { } public synchronized void setData(Vector<SimulationTransaction> _trans, String taskName) { - data = new SimulationTransaction[_trans.size()]; - int t = 0; - for(int i=0; i<_trans.size(); i++) { - if (_trans.get(i).taskName.equals(taskName)){ - data[t] = _trans.get(i); - t++; - } + if(_trans != null) { + data = new SimulationTransaction[_trans.size()]; + int t = 0; + for(int i=0; i<_trans.size(); i++) { + if (_trans.get(i).taskName.equals(taskName)){ + data[t] = _trans.get(i); + t++; + } + } + fireTableStructureChanged(); } - fireTableStructureChanged(); + } } diff --git a/ttool/src/test/java/tmltranslator/RemoveAllTransactionsTests.java b/ttool/src/test/java/tmltranslator/RemoveAllTransactionsTests.java index a9830670690a978e1dda63273962793351d3cbff..402dcff46463c68e61b9e7634401a71e2389e5ab 100644 --- a/ttool/src/test/java/tmltranslator/RemoveAllTransactionsTests.java +++ b/ttool/src/test/java/tmltranslator/RemoveAllTransactionsTests.java @@ -2,9 +2,8 @@ package tmltranslator; import common.ConfigurationTTool; import common.SpecConfigTTool; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.select.Elements; +import graph.AUTGraph; +import myutil.FileUtils; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; @@ -29,6 +28,8 @@ public class RemoveAllTransactionsTests extends AbstractUITest { final String DIR_GEN = "test_diplo_simulator/"; final String [] MODELS_PARSE_HTML = {"parseFPGA_HTML"}; final static String EXPECTED_FILE_REMOVE_ALL_TRANS = getBaseResourcesDir() + "tmltranslator/expected/expected_remove_all_trans.txt"; + final int [] FULL_DATA_TRANSACTION = {21, 20, 1179, 1179}; + final int [] REMOVE_DATA_TRANSACTION = {8, 7, 1179, 1179}; private String SIM_DIR; @BeforeClass public static void setUpBeforeClass() throws Exception { @@ -157,7 +158,7 @@ public class RemoveAllTransactionsTests extends AbstractUITest { //list 100 recent transactions on TransacList to check it is empty or not //run again next 100 time units // save trace file and check the transactions displayed on the trace. - params[2] = "26 1;1 6 100; 26 1;22 100; 1 6 100; 7 2 " + graphPath +"_save.txt"; + params[2] = "26 1;1 6 100; 26 1;22 100; 1 6 100; 7 2 " + graphPath + "_save.txt" + "; 1 0; 1 7 100 100 " + graphPath + "_save"; proc = Runtime.getRuntime().exec(params); proc_in = new BufferedReader(new InputStreamReader(proc.getInputStream())); monitorError(proc); @@ -169,6 +170,23 @@ public class RemoveAllTransactionsTests extends AbstractUITest { out.append(str + "\n"); } } + + params = new String[3]; + + params[0] = "./" + SIM_DIR + "run.x"; + params[1] = "-cmd"; + params[2] = "1 0; 1 7 100 100 " + graphPath + "_full"; + proc = Runtime.getRuntime().exec(params); + //proc = Runtime.getRuntime().exec("./" + SIM_DIR + "run.x -explo -gname testgraph_" + s); + proc_in = new BufferedReader(new InputStreamReader(proc.getInputStream())); + + monitorError(proc); + + while ((str = proc_in.readLine()) != null) { + // TraceManager.addDev( "Sending " + str + " from " + port + " to client..." ); + System.out.println("executing: " + str); + } + } catch (Exception e) { // Probably make is not installed System.out.println("FAILED: executing simulation"); @@ -215,6 +233,59 @@ public class RemoveAllTransactionsTests extends AbstractUITest { } reader1.close(); reader2.close(); + + //compare number of states + //Non remove trans check + File graphFile = new File(graphPath + "_full.aut"); + String graphData = ""; + try { + graphData = FileUtils.loadFileData(graphFile); + } catch (Exception e) { + assertTrue(false); + } + + AUTGraph graph = new AUTGraph(); + graph.buildGraph(graphData); + // States and transitions + System.out.println("executing: nb states of " + s + " " + graph.getNbOfStates()); + assertTrue(FULL_DATA_TRANSACTION[0] == graph.getNbOfStates()); + System.out.println("executing: nb transitions of " + s + " " + graph.getNbOfTransitions()); + assertTrue(FULL_DATA_TRANSACTION[1] == graph.getNbOfTransitions()); + + // Min and max cycles + int minValue = graph.getMinValue("allCPUsFPGAsTerminated"); + System.out.println("executing: minvalue of " + s + " " + minValue); + assertTrue(FULL_DATA_TRANSACTION[2] == minValue); + + int maxValue = graph.getMaxValue("allCPUsFPGAsTerminated"); + System.out.println("executing: maxvalue of " + s + " " + maxValue); + assertTrue(FULL_DATA_TRANSACTION[3] == maxValue); + + //Remove trans check + graphFile = new File(graphPath + "_save.aut"); + graphData = ""; + try { + graphData = FileUtils.loadFileData(graphFile); + } catch (Exception e) { + assertTrue(false); + } + + graph = new AUTGraph(); + graph.buildGraph(graphData); + // States and transitions + System.out.println("executing: nb states of remove transactions " + s + " " + graph.getNbOfStates()); + assertTrue(REMOVE_DATA_TRANSACTION[0] == graph.getNbOfStates()); + System.out.println("executing: nb transitions of remove transactions " + s + " " + graph.getNbOfTransitions()); + assertTrue(REMOVE_DATA_TRANSACTION[1] == graph.getNbOfTransitions()); + + // Min and max cycles + minValue = graph.getMinValue("allCPUsFPGAsTerminated"); + System.out.println("executing: minvalue of remove transactions " + s + " " + minValue); + assertTrue(REMOVE_DATA_TRANSACTION[2] == minValue); + + maxValue = graph.getMaxValue("allCPUsFPGAsTerminated"); + System.out.println("executing: maxvalue of remove transactions " + s + " " + maxValue); + assertTrue(REMOVE_DATA_TRANSACTION[3] == maxValue); } } }