Browse Source

jdd.JDD: add sanity checks (SanityJDD framework)

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@11451 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Joachim Klein 10 years ago
parent
commit
338d76503c
  1. 98
      prism/src/jdd/JDD.java

98
prism/src/jdd/JDD.java

@ -380,6 +380,9 @@ public class JDD
*/ */
public static JDDNode Not(JDDNode dd) public static JDDNode Not(JDDNode dd)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsZeroOneMTBDD(dd);
}
if (DebugJDD.debugEnabled) if (DebugJDD.debugEnabled)
DebugJDD.DD_Method_Argument(dd); DebugJDD.DD_Method_Argument(dd);
return ptrToNode(DD_Not(dd.ptr())); return ptrToNode(DD_Not(dd.ptr()));
@ -391,6 +394,10 @@ public class JDD
*/ */
public static JDDNode Or(JDDNode dd1, JDDNode dd2) public static JDDNode Or(JDDNode dd1, JDDNode dd2)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsZeroOneMTBDD(dd1);
SanityJDD.checkIsZeroOneMTBDD(dd2);
}
if (DebugJDD.debugEnabled) { if (DebugJDD.debugEnabled) {
DebugJDD.DD_Method_Argument(dd1); DebugJDD.DD_Method_Argument(dd1);
DebugJDD.DD_Method_Argument(dd2); DebugJDD.DD_Method_Argument(dd2);
@ -428,6 +435,10 @@ public class JDD
*/ */
public static JDDNode And(JDDNode dd1, JDDNode dd2) public static JDDNode And(JDDNode dd1, JDDNode dd2)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsZeroOneMTBDD(dd1);
SanityJDD.checkIsZeroOneMTBDD(dd2);
}
if (DebugJDD.debugEnabled) { if (DebugJDD.debugEnabled) {
DebugJDD.DD_Method_Argument(dd1); DebugJDD.DD_Method_Argument(dd1);
DebugJDD.DD_Method_Argument(dd2); DebugJDD.DD_Method_Argument(dd2);
@ -466,6 +477,10 @@ public class JDD
*/ */
public static JDDNode Xor(JDDNode dd1, JDDNode dd2) public static JDDNode Xor(JDDNode dd1, JDDNode dd2)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsZeroOneMTBDD(dd1);
SanityJDD.checkIsZeroOneMTBDD(dd2);
}
if (DebugJDD.debugEnabled) { if (DebugJDD.debugEnabled) {
DebugJDD.DD_Method_Argument(dd1); DebugJDD.DD_Method_Argument(dd1);
DebugJDD.DD_Method_Argument(dd2); DebugJDD.DD_Method_Argument(dd2);
@ -581,6 +596,9 @@ public class JDD
*/ */
public static JDDNode Restrict(JDDNode dd, JDDNode cube) public static JDDNode Restrict(JDDNode dd, JDDNode cube)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsZeroOneMTBDD(dd);
}
if (DebugJDD.debugEnabled) { if (DebugJDD.debugEnabled) {
DebugJDD.DD_Method_Argument(dd); DebugJDD.DD_Method_Argument(dd);
DebugJDD.DD_Method_Argument(cube); DebugJDD.DD_Method_Argument(cube);
@ -594,6 +612,9 @@ public class JDD
*/ */
public static JDDNode ITE(JDDNode dd1, JDDNode dd2, JDDNode dd3) public static JDDNode ITE(JDDNode dd1, JDDNode dd2, JDDNode dd3)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsZeroOneMTBDD(dd1);
}
if (DebugJDD.debugEnabled) { if (DebugJDD.debugEnabled) {
DebugJDD.DD_Method_Argument(dd1); DebugJDD.DD_Method_Argument(dd1);
DebugJDD.DD_Method_Argument(dd2); DebugJDD.DD_Method_Argument(dd2);
@ -608,6 +629,10 @@ public class JDD
*/ */
public static boolean AreIntersecting(JDDNode dd1, JDDNode dd2) public static boolean AreIntersecting(JDDNode dd1, JDDNode dd2)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsZeroOneMTBDD(dd1);
SanityJDD.checkIsZeroOneMTBDD(dd2);
}
JDDNode tmp; JDDNode tmp;
boolean res; boolean res;
JDD.Ref(dd1); JDD.Ref(dd1);
@ -624,6 +649,10 @@ public class JDD
*/ */
public static boolean IsContainedIn(JDDNode dd1, JDDNode dd2) public static boolean IsContainedIn(JDDNode dd1, JDDNode dd2)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsZeroOneMTBDD(dd1);
SanityJDD.checkIsZeroOneMTBDD(dd2);
}
JDDNode tmp; JDDNode tmp;
boolean res; boolean res;
JDD.Ref(dd1); JDD.Ref(dd1);
@ -713,6 +742,9 @@ public class JDD
*/ */
public static JDDNode ThereExists(JDDNode dd, JDDVars vars) public static JDDNode ThereExists(JDDNode dd, JDDVars vars)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsZeroOneMTBDD(dd);
}
if (DebugJDD.debugEnabled) if (DebugJDD.debugEnabled)
DebugJDD.DD_Method_Argument(dd); DebugJDD.DD_Method_Argument(dd);
return ptrToNode(DD_ThereExists(dd.ptr(), vars.array(), vars.n())); return ptrToNode(DD_ThereExists(dd.ptr(), vars.array(), vars.n()));
@ -724,6 +756,9 @@ public class JDD
*/ */
public static JDDNode ForAll(JDDNode dd, JDDVars vars) public static JDDNode ForAll(JDDNode dd, JDDVars vars)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsZeroOneMTBDD(dd);
}
if (DebugJDD.debugEnabled) if (DebugJDD.debugEnabled)
DebugJDD.DD_Method_Argument(dd); DebugJDD.DD_Method_Argument(dd);
return ptrToNode(DD_ForAll(dd.ptr(), vars.array(), vars.n())); return ptrToNode(DD_ForAll(dd.ptr(), vars.array(), vars.n()));
@ -998,6 +1033,11 @@ public class JDD
*/ */
public static boolean isSingleton(JDDNode dd, JDDVars vars) public static boolean isSingleton(JDDNode dd, JDDVars vars)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsZeroOneMTBDD(dd);
SanityJDD.checkVarsAreSorted(vars);
}
int i=0; int i=0;
while (!dd.isConstant()) { while (!dd.isConstant()) {
int index = dd.getIndex(); int index = dd.getIndex();
@ -1167,6 +1207,9 @@ public class JDD
*/ */
public static JDDNode SetVectorElement(JDDNode dd, JDDVars vars, long index, double value) public static JDDNode SetVectorElement(JDDNode dd, JDDVars vars, long index, double value)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, vars);
}
if (DebugJDD.debugEnabled) if (DebugJDD.debugEnabled)
DebugJDD.DD_Method_Argument(dd); DebugJDD.DD_Method_Argument(dd);
return ptrToNode(DD_SetVectorElement(dd.ptr(), vars.array(), vars.n(), index, value)); return ptrToNode(DD_SetVectorElement(dd.ptr(), vars.array(), vars.n(), index, value));
@ -1178,6 +1221,9 @@ public class JDD
*/ */
public static JDDNode SetMatrixElement(JDDNode dd, JDDVars rvars, JDDVars cvars, long rindex, long cindex, double value) public static JDDNode SetMatrixElement(JDDNode dd, JDDVars rvars, JDDVars cvars, long rindex, long cindex, double value)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, rvars, cvars);
}
if (DebugJDD.debugEnabled) if (DebugJDD.debugEnabled)
DebugJDD.DD_Method_Argument(dd); DebugJDD.DD_Method_Argument(dd);
return ptrToNode(DD_SetMatrixElement(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), rindex, cindex, value)); return ptrToNode(DD_SetMatrixElement(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), rindex, cindex, value));
@ -1189,6 +1235,9 @@ public class JDD
*/ */
public static JDDNode Set3DMatrixElement(JDDNode dd, JDDVars rvars, JDDVars cvars, JDDVars lvars, long rindex, long cindex, long lindex, double value) public static JDDNode Set3DMatrixElement(JDDNode dd, JDDVars rvars, JDDVars cvars, JDDVars lvars, long rindex, long cindex, long lindex, double value)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, rvars, cvars, lvars);
}
if (DebugJDD.debugEnabled) if (DebugJDD.debugEnabled)
DebugJDD.DD_Method_Argument(dd); DebugJDD.DD_Method_Argument(dd);
return ptrToNode(DD_Set3DMatrixElement(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), lvars.array(), lvars.n(), rindex, cindex, lindex, value)); return ptrToNode(DD_Set3DMatrixElement(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), lvars.array(), lvars.n(), rindex, cindex, lindex, value));
@ -1200,6 +1249,9 @@ public class JDD
*/ */
public static double GetVectorElement(JDDNode dd, JDDVars vars, long index) public static double GetVectorElement(JDDNode dd, JDDVars vars, long index)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, vars);
}
double rv = DD_GetVectorElement(dd.ptr(), vars.array(), vars.n(), index); double rv = DD_GetVectorElement(dd.ptr(), vars.array(), vars.n(), index);
checkForCuddError(); checkForCuddError();
return rv; return rv;
@ -1211,6 +1263,9 @@ public class JDD
*/ */
public static JDDNode Identity(JDDVars rvars, JDDVars cvars) public static JDDNode Identity(JDDVars rvars, JDDVars cvars)
{ {
if (SanityJDD.enabled) {
SanityJDD.check(rvars.n() == cvars.n(), "Mismatch of JDDVars sizes");
}
return ptrToNode(DD_Identity(rvars.array(), cvars.array(), rvars.n())); return ptrToNode(DD_Identity(rvars.array(), cvars.array(), rvars.n()));
} }
@ -1220,6 +1275,10 @@ public class JDD
*/ */
public static JDDNode Transpose(JDDNode dd, JDDVars rvars, JDDVars cvars) public static JDDNode Transpose(JDDNode dd, JDDVars rvars, JDDVars cvars)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, rvars, cvars);
}
if (DebugJDD.debugEnabled) if (DebugJDD.debugEnabled)
DebugJDD.DD_Method_Argument(dd); DebugJDD.DD_Method_Argument(dd);
return ptrToNode(DD_Transpose(dd.ptr(), rvars.array(), cvars.array(), rvars.n())); return ptrToNode(DD_Transpose(dd.ptr(), rvars.array(), cvars.array(), rvars.n()));
@ -1392,6 +1451,9 @@ public class JDD
*/ */
public static void PrintVector(JDDNode dd, JDDVars vars) public static void PrintVector(JDDNode dd, JDDVars vars)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, vars);
}
DD_PrintVector(dd.ptr(), vars.array(), vars.n(), NORMAL); DD_PrintVector(dd.ptr(), vars.array(), vars.n(), NORMAL);
} }
@ -1401,6 +1463,9 @@ public class JDD
*/ */
public static void PrintVector(JDDNode dd, JDDVars vars, int accuracy) public static void PrintVector(JDDNode dd, JDDVars vars, int accuracy)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, vars);
}
DD_PrintVector(dd.ptr(), vars.array(), vars.n(), accuracy); DD_PrintVector(dd.ptr(), vars.array(), vars.n(), accuracy);
} }
@ -1410,6 +1475,9 @@ public class JDD
*/ */
public static void PrintMatrix(JDDNode dd, JDDVars rvars, JDDVars cvars) public static void PrintMatrix(JDDNode dd, JDDVars rvars, JDDVars cvars)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, rvars, cvars);
}
DD_PrintMatrix(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), NORMAL); DD_PrintMatrix(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), NORMAL);
} }
@ -1419,6 +1487,9 @@ public class JDD
*/ */
public static void PrintMatrix(JDDNode dd, JDDVars rvars, JDDVars cvars, int accuracy) public static void PrintMatrix(JDDNode dd, JDDVars rvars, JDDVars cvars, int accuracy)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, rvars, cvars);
}
DD_PrintMatrix(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), accuracy); DD_PrintMatrix(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), accuracy);
} }
@ -1428,6 +1499,10 @@ public class JDD
*/ */
public static void PrintVectorFiltered(JDDNode dd, JDDNode filter, JDDVars vars) public static void PrintVectorFiltered(JDDNode dd, JDDNode filter, JDDVars vars)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, vars);
SanityJDD.checkIsDDOverVars(filter, vars);
}
DD_PrintVectorFiltered(dd.ptr(), filter.ptr(), vars.array(), vars.n(), NORMAL); DD_PrintVectorFiltered(dd.ptr(), filter.ptr(), vars.array(), vars.n(), NORMAL);
} }
@ -1437,6 +1512,10 @@ public class JDD
*/ */
public static void PrintVectorFiltered(JDDNode dd, JDDNode filter, JDDVars vars, int accuracy) public static void PrintVectorFiltered(JDDNode dd, JDDNode filter, JDDVars vars, int accuracy)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, vars);
SanityJDD.checkIsDDOverVars(filter, vars);
}
DD_PrintVectorFiltered(dd.ptr(), filter.ptr(), vars.array(), vars.n(), accuracy); DD_PrintVectorFiltered(dd.ptr(), filter.ptr(), vars.array(), vars.n(), accuracy);
} }
@ -1446,6 +1525,9 @@ public class JDD
*/ */
public static void TraverseVector(JDDNode dd, JDDVars vars, JDDVectorConsumer vc, int code) public static void TraverseVector(JDDNode dd, JDDVars vars, JDDVectorConsumer vc, int code)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, vars);
}
TraverseVectorRec(dd, vars, 0, 0, vc, code); TraverseVectorRec(dd, vars, 0, 0, vc, code);
} }
@ -1505,6 +1587,10 @@ public class JDD
*/ */
public static void ExportMatrixToPPFile(JDDNode dd, JDDVars rvars, JDDVars cvars, String filename) public static void ExportMatrixToPPFile(JDDNode dd, JDDVars rvars, JDDVars cvars, String filename)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, rvars, cvars);
SanityJDD.check(rvars.n() == cvars.n(), "Mismatch of JDDVars sizes");
}
DD_ExportMatrixToPPFile(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), filename); DD_ExportMatrixToPPFile(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), filename);
} }
@ -1535,6 +1621,10 @@ public class JDD
*/ */
public static void Export3dMatrixToPPFile(JDDNode dd, JDDVars rvars, JDDVars cvars, JDDVars nvars, String filename) public static void Export3dMatrixToPPFile(JDDNode dd, JDDVars rvars, JDDVars cvars, JDDVars nvars, String filename)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, rvars, cvars, nvars);
SanityJDD.check(rvars.n() == cvars.n(), "Mismatch of JDDVars sizes");
}
DD_Export3dMatrixToPPFile(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), nvars.array(), nvars.n(), filename); DD_Export3dMatrixToPPFile(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), nvars.array(), nvars.n(), filename);
} }
@ -1544,6 +1634,10 @@ public class JDD
*/ */
public static void ExportMatrixToMatlabFile(JDDNode dd, JDDVars rvars, JDDVars cvars, String name, String filename) public static void ExportMatrixToMatlabFile(JDDNode dd, JDDVars rvars, JDDVars cvars, String name, String filename)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, rvars, cvars);
SanityJDD.check(rvars.n() == cvars.n(), "Mismatch of JDDVars sizes");
}
DD_ExportMatrixToMatlabFile(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), name, filename); DD_ExportMatrixToMatlabFile(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), name, filename);
} }
@ -1553,6 +1647,10 @@ public class JDD
*/ */
public static void ExportMatrixToSpyFile(JDDNode dd, JDDVars rvars, JDDVars cvars, int depth, String filename) public static void ExportMatrixToSpyFile(JDDNode dd, JDDVars rvars, JDDVars cvars, int depth, String filename)
{ {
if (SanityJDD.enabled) {
SanityJDD.checkIsDDOverVars(dd, rvars, cvars);
SanityJDD.check(rvars.n() == cvars.n(), "Mismatch of JDDVars sizes");
}
DD_ExportMatrixToSpyFile(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), depth, filename); DD_ExportMatrixToSpyFile(dd.ptr(), rvars.array(), rvars.n(), cvars.array(), cvars.n(), depth, filename);
} }

Loading…
Cancel
Save