Skip to content
Snippets Groups Projects
Commit 34528859 authored by tempiaa's avatar tempiaa
Browse files

Added re-initialization check property in avatar model-checker

parent 8f1a5aee
No related branches found
No related tags found
1 merge request!330Model-checker upgrades
...@@ -135,6 +135,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph { ...@@ -135,6 +135,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
checkNoDeadlocks = false; checkNoDeadlocks = false;
deadlockStop = false; deadlockStop = false;
studyReachability = false; studyReachability = false;
studyReinit = false;
computeRG = false; computeRG = false;
stateLimitRG = false; //No state limit in RG computation stateLimitRG = false; //No state limit in RG computation
timeLimitRG = false; timeLimitRG = false;
...@@ -326,13 +327,13 @@ public class AvatarModelChecker implements Runnable, myutil.Graph { ...@@ -326,13 +327,13 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
} }
public void setReinitAnalyzis(boolean studyReinit) { public void setReinitAnalysis(boolean studyReinit) {
this.studyReinit = studyReinit; this.studyReinit = studyReinit;
} }
public boolean getReinitResult() { public boolean getReinitResult() {
if (initState != null) { if (studyReinit && initState != null) {
return initState.getResult(); return initState.getResult();
} }
return false; return false;
...@@ -363,7 +364,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph { ...@@ -363,7 +364,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
}*/ }*/
public boolean startModelCheckingProperties() { public boolean startModelCheckingProperties() {
boolean studyS, studyL, studyR, genRG; boolean studyS, studyL, studyR, studyRI, genRG;
long deadlocks = 0; long deadlocks = 0;
if (spec == null) { if (spec == null) {
...@@ -382,6 +383,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph { ...@@ -382,6 +383,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
studyR = studyReachability; studyR = studyReachability;
studyL = studyLiveness; studyL = studyLiveness;
studyS = studySafety; studyS = studySafety;
studyRI = studyReinit;
genRG = computeRG; genRG = computeRG;
//then compute livenesses //then compute livenesses
...@@ -390,15 +392,16 @@ public class AvatarModelChecker implements Runnable, myutil.Graph { ...@@ -390,15 +392,16 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
studySafety = false; studySafety = false;
studyLiveness = false; studyLiveness = false;
studyReachability = false; studyReachability = false;
studyReinit = false;
if (studyL) { if (studyL) {
studySafety = true; studySafety = true;
for (SafetyProperty sp : livenesses) { for (SafetyProperty sp : livenesses) {
safety = sp; safety = sp;
startModelChecking(nbOfThreads); startModelChecking(nbOfThreads);
deadlocks += nbOfDeadlocks;
resetModelChecking(); resetModelChecking();
safety.setComputed(); safety.setComputed();
deadlocks += nbOfDeadlocks;
} }
studySafety = false; studySafety = false;
} }
...@@ -426,12 +429,20 @@ public class AvatarModelChecker implements Runnable, myutil.Graph { ...@@ -426,12 +429,20 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
safetyLeadStates = null; safetyLeadStates = null;
} }
safety.setComputed(); safety.setComputed();
resetModelChecking();
deadlocks += nbOfDeadlocks; deadlocks += nbOfDeadlocks;
resetModelChecking();
} }
studySafety = false; studySafety = false;
} }
if (studyRI) {
studyReinit = true;
startModelChecking(nbOfThreads);
deadlocks += nbOfDeadlocks;
resetModelChecking();
studyReinit = false;
}
if (studyR || genRG) { if (studyR || genRG) {
if (genRG) { if (genRG) {
deadlocks = 0; deadlocks = 0;
...@@ -462,6 +473,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph { ...@@ -462,6 +473,7 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
studyLiveness = studyL; studyLiveness = studyL;
studySafety = studyS; studySafety = studyS;
studyReachability = studyR; studyReachability = studyR;
studyReinit = studyRI;
TraceManager.addDev("Model checking done"); TraceManager.addDev("Model checking done");
return true; return true;
...@@ -538,6 +550,11 @@ public class AvatarModelChecker implements Runnable, myutil.Graph { ...@@ -538,6 +550,11 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
} else { } else {
pendingStates.add(initialState); pendingStates.add(initialState);
} }
if (studyReinit) {
initState = new SpecificationReinit(initialState);
}
//states.put(initialState.hashValue, initialState); //states.put(initialState.hashValue, initialState);
//statesByID.put(initialState.id, initialState); //statesByID.put(initialState.id, initialState);
nbOfCurrentComputations = 0; nbOfCurrentComputations = 0;
...@@ -1858,18 +1875,29 @@ public class AvatarModelChecker implements Runnable, myutil.Graph { ...@@ -1858,18 +1875,29 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
} }
} }
} }
if (studyReinit && similar != null) {
if (similar != initState.initState && stateIsReachableFromState(similar, _ss)) {
propertyDone = true;
initState.setResult(false);
}
}
} }
private void checkPropertyOnDeadlock(SpecificationState ss) { private void checkPropertyOnDeadlock(SpecificationState ss) {
if (studySafety) { if (studySafety) {
if (safety.safetyType == SafetyProperty.ALLTRACES_ONESTATE && ss.property == false) { if (safety.safetyType == SafetyProperty.ALLTRACES_ONESTATE && ss.property == false) {
safety.result = false;
propertyDone = true; propertyDone = true;
safety.result = false;
} else if (safety.safetyType == SafetyProperty.ONETRACE_ALLSTATES && ss.property == false) { } else if (safety.safetyType == SafetyProperty.ONETRACE_ALLSTATES && ss.property == false) {
safety.result = true;
propertyDone = true; propertyDone = true;
safety.result = true;
} }
} }
if (studyReinit) {
propertyDone = true;
initState.setResult(false);
}
} }
...@@ -2092,6 +2120,23 @@ public class AvatarModelChecker implements Runnable, myutil.Graph { ...@@ -2092,6 +2120,23 @@ public class AvatarModelChecker implements Runnable, myutil.Graph {
} }
return ret.toString(); return ret.toString();
} }
public String reinitToString() {
if (!studyReinit || initState == null) {
return "Reinitialization check not activeted\n";
}
String ret;
if (initState.getResult()) {
ret = "property is satisfied\n";
} else {
ret = "property is NOT satisfied\n";
}
return ret;
}
// Do not free the RG // Do not free the RG
public void freeUselessAllocations() { public void freeUselessAllocations() {
......
...@@ -101,6 +101,7 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act ...@@ -101,6 +101,7 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act
protected static int livenessSelected = LIVENESS_NONE; protected static int livenessSelected = LIVENESS_NONE;
protected static boolean safetySelected = false; protected static boolean safetySelected = false;
protected static boolean checkNoDeadSelected = false; protected static boolean checkNoDeadSelected = false;
protected static boolean checkReinitSelected = false;
protected static boolean limitStatesSelected = false; protected static boolean limitStatesSelected = false;
protected static String stateLimitValue; protected static String stateLimitValue;
protected static boolean limitTimeSelected = false; protected static boolean limitTimeSelected = false;
...@@ -151,6 +152,7 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act ...@@ -151,6 +152,7 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act
protected JCheckBox timeLimit; protected JCheckBox timeLimit;
protected JTextField timeLimitField; protected JTextField timeLimitField;
protected JCheckBox noDeadlocks; protected JCheckBox noDeadlocks;
protected JCheckBox reinit;
protected JCheckBox safety; protected JCheckBox safety;
protected JButton checkUncheckAllPragmas; protected JButton checkUncheckAllPragmas;
protected java.util.List<JCheckBox> customChecks; protected java.util.List<JCheckBox> customChecks;
...@@ -302,9 +304,17 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act ...@@ -302,9 +304,17 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act
// Deadlocks // Deadlocks
cbasic.gridwidth = 1;
noDeadlocks = new JCheckBox("No deadlocks?", checkNoDeadSelected); noDeadlocks = new JCheckBox("No deadlocks?", checkNoDeadSelected);
noDeadlocks.addActionListener(this); noDeadlocks.addActionListener(this);
jpbasic.add(noDeadlocks, cbasic); jpbasic.add(noDeadlocks, cbasic);
// Reinit
cbasic.gridwidth = GridBagConstraints.REMAINDER;
reinit = new JCheckBox("Reinitialization?", checkReinitSelected);
reinit.addActionListener(this);
jpbasic.add(reinit, cbasic);
// Reachability // Reachability
...@@ -699,6 +709,7 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act ...@@ -699,6 +709,7 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act
amc.setIgnoreConcurrenceBetweenInternalActions(ignoreConcurrenceBetweenInternalActionsSelected); amc.setIgnoreConcurrenceBetweenInternalActions(ignoreConcurrenceBetweenInternalActionsSelected);
amc.setIgnoreInternalStates(ignoreInternalStatesSelected); amc.setIgnoreInternalStates(ignoreInternalStatesSelected);
amc.setCheckNoDeadlocks(checkNoDeadSelected); amc.setCheckNoDeadlocks(checkNoDeadSelected);
amc.setReinitAnalysis(checkReinitSelected);
// Reachability // Reachability
int res; int res;
...@@ -824,9 +835,14 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act ...@@ -824,9 +835,14 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act
jta.append("\n\nModel checking done\n"); jta.append("\n\nModel checking done\n");
jta.append("Nb of states:" + amc.getNbOfStates() + "\n"); jta.append("Nb of states:" + amc.getNbOfStates() + "\n");
jta.append("Nb of links:" + amc.getNbOfLinks() + "\n"); jta.append("Nb of links:" + amc.getNbOfLinks() + "\n");
if (checkNoDeadSelected) { if (checkNoDeadSelected) {
jta.append("\nNo deadlocks?\n" + "-> " + amc.deadlockToString() + "\n"); jta.append("\nNo deadlocks?\n" + "-> " + amc.deadlockToString() + "\n");
} }
if (checkReinitSelected) {
jta.append("\nReinitialization?\n" + "-> " + amc.reinitToString() + "\n");
}
if ((reachabilitySelected == REACHABILITY_SELECTED) || (reachabilitySelected == REACHABILITY_ALL)) { if ((reachabilitySelected == REACHABILITY_SELECTED) || (reachabilitySelected == REACHABILITY_ALL)) {
jta.append("\nReachabilities found:\n"); jta.append("\nReachabilities found:\n");
...@@ -1002,6 +1018,7 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act ...@@ -1002,6 +1018,7 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act
ignoreConcurrenceBetweenInternalActionsSelected = ignoreConcurrenceBetweenInternalActions.isSelected(); ignoreConcurrenceBetweenInternalActionsSelected = ignoreConcurrenceBetweenInternalActions.isSelected();
ignoreInternalStatesSelected = ignoreInternalStates.isSelected(); ignoreInternalStatesSelected = ignoreInternalStates.isSelected();
checkNoDeadSelected = noDeadlocks.isSelected(); checkNoDeadSelected = noDeadlocks.isSelected();
checkReinitSelected = reinit.isSelected();
if (noReachability.isSelected()) { if (noReachability.isSelected()) {
reachabilitySelected = REACHABILITY_NONE; reachabilitySelected = REACHABILITY_NONE;
...@@ -1034,7 +1051,7 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act ...@@ -1034,7 +1051,7 @@ public class JDialogAvatarModelChecker extends javax.swing.JFrame implements Act
switch (mode) { switch (mode) {
case NOT_STARTED: case NOT_STARTED:
if ((reachabilitySelected == REACHABILITY_SELECTED) || (reachabilitySelected == REACHABILITY_ALL) || (livenessSelected == LIVENESS_SELECTED) || (livenessSelected == LIVENESS_ALL) || checkNoDeadSelected || graphSelected || graphSelectedDot) { if ((reachabilitySelected == REACHABILITY_SELECTED) || (reachabilitySelected == REACHABILITY_ALL) || (livenessSelected == LIVENESS_SELECTED) || (livenessSelected == LIVENESS_ALL) || checkNoDeadSelected || checkReinitSelected || graphSelected || graphSelectedDot) {
start.setEnabled(true); start.setEnabled(true);
} else { } else {
if (safetySelected) { if (safetySelected) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment