87 static char rcsid[]
DD_UNUSED =
"$Id: cuddCheck.c,v 1.37 2012/02/05 01:07:18 fabio Exp $";
159 for (i = 0; i < (unsigned) table->
size; i++) {
161 if (i != (
unsigned) table->
perm[index]) {
162 (void) fprintf(table->
err,
163 "Permutation corrupted: invperm[%u] = %d\t perm[%d] = %d\n",
164 i, index, index, table->
perm[index]);
172 for (j = 0; j < slots; j++) {
174 while (f != sentinel) {
177 if ((
int) f->
index != index) {
178 (void) fprintf(table->
err,
179 "Error: node has illegal index\n");
183 if ((
unsigned)
cuddI(table,
cuddT(f)->index) <= i ||
186 (void) fprintf(table->
err,
187 "Error: node has illegal children\n");
192 (void) fprintf(table->
err,
193 "Error: node has illegal form\n");
198 (void) fprintf(table->
err,
199 "Error: node has identical children\n");
204 (void) fprintf(table->
err,
205 "Error: live node has dead children\n");
210 (void) fprintf(table->
err,
"Error: misplaced node\n");
242 }
else if (
cuddT(f) != NULL &&
cuddE(f) != NULL && f->
ref == 0) {
245 debugCheckParent(table,f);
249 "Error: node has illegal Then or Else pointers\n");
259 fprintf(table->
err,
"Error: wrong number of total nodes\n");
263 fprintf(table->
err,
"Error: wrong number of dead nodes\n");
269 for (i = 0; i < (unsigned) table->
sizeZ; i++) {
271 if (i != (
unsigned) table->
permZ[index]) {
272 (void) fprintf(table->
err,
273 "Permutation corrupted: invpermZ[%u] = %d\t permZ[%d] = %d in ZDD\n",
274 i, index, index, table->
permZ[index]);
281 for (j = 0; j < slots; j++) {
286 if ((
int) f->
index != index) {
287 (void) fprintf(table->
err,
288 "Error: ZDD node has illegal index\n");
294 (void) fprintf(table->
err,
295 "Error: ZDD node has complemented children\n");
299 if ((
unsigned)
cuddIZ(table,
cuddT(f)->index) <= i ||
301 (void) fprintf(table->
err,
302 "Error: ZDD node has illegal children\n");
309 (void) fprintf(table->
err,
310 "Error: ZDD node has zero then child\n");
314 if (
cuddT(f)->ref == 0 ||
cuddE(f)->ref == 0) {
315 (void) fprintf(table->
err,
316 "Error: ZDD live node has dead children\n");
348 }
else if (
cuddT(f) != NULL &&
cuddE(f) != NULL && f->
ref == 0) {
351 debugCheckParent(table,f);
355 "Error: ZDD node has illegal Then or Else pointers\n");
366 "Error: wrong number of total nodes in ZDD\n");
371 "Error: wrong number of dead nodes in ZDD\n");
382 for (j = 0; j < slots; j++) {
388 fprintf(table->
err,
"Error: node has illegal index\n");
389 #if SIZEOF_VOID_P == 8 391 " node 0x%lx, id = %u, ref = %u, value = %g\n",
395 " node 0x%x, id = %hu, ref = %hu, value = %g\n",
407 (void) fprintf(table->
err,
408 "Error: wrong number of total nodes in constants\n");
412 (void) fprintf(table->
err,
413 "Error: wrong number of dead nodes in constants\n");
417 while (
st_gen(gen, &f, &count)) {
419 #if SIZEOF_VOID_P == 8 420 fprintf(table->
err,
"ref count error at node 0x%lx, count = %d, id = %u, ref = %u, then = 0x%lx, else = 0x%lx\n",(
ptruint)f,count,f->
index,f->ref,(
ptruint)
cuddT(f),(
ptruint)
cuddE(f));
422 fprintf(table->
err,
"ref count error at node 0x%x, count = %d, id = %hu, ref = %hu, then = 0x%x, else = 0x%x\n",(
ptruint)f,count,f->index,f->ref,(
ptruint)
cuddT(f),(
ptruint)
cuddE(f));
482 for (i = 0; i < size; i++) {
485 keys = subtable->
keys;
486 dead = subtable->
dead;
488 slots = subtable->
slots;
489 shift = subtable->
shift;
490 logSlots =
sizeof(int) * 8 - shift;
491 if (((slots >> logSlots) << logSlots) != slots) {
492 (void) fprintf(table->
err,
493 "Unique table %d is not the right power of 2\n", i);
494 (void) fprintf(table->
err,
495 " slots = %u shift = %d\n", slots, shift);
499 for (j = 0; (unsigned) j < slots; j++) {
501 if (node != sentinel) {
504 while (node != sentinel) {
506 if (node->
ref == 0) {
513 (void) fprintf(table->
err,
"Wrong number of keys found \ 514 in unique table %d (difference=%d)\n", i, keys);
518 (void) fprintf(table->
err,
"Wrong number of dead found \ 519 in unique table no. %d (difference=%d)\n", i, dead);
526 for (i = 0; i < size; i++) {
529 keys = subtable->
keys;
530 dead = subtable->
dead;
532 totalSlots += subtable->
slots;
534 for (j = 0; (unsigned) j < subtable->slots; j++) {
539 while (node != NULL) {
541 if (node->
ref == 0) {
548 (void) fprintf(table->
err,
"Wrong number of keys found \ 549 in ZDD unique table no. %d (difference=%d)\n", i, keys);
553 (void) fprintf(table->
err,
"Wrong number of dead found \ 554 in ZDD unique table no. %d (difference=%d)\n", i, dead);
561 keys = subtable->
keys;
562 dead = subtable->
dead;
564 totalSlots += subtable->
slots;
566 for (j = 0; (unsigned) j < subtable->slots; j++) {
571 while (node != NULL) {
573 if (node->
ref == 0) {
580 (void) fprintf(table->
err,
"Wrong number of keys found \ 581 in the constant table (difference=%d)\n", keys);
585 (void) fprintf(table->
err,
"Wrong number of dead found \ 586 in the constant table (difference=%d)\n", dead);
588 if ((
unsigned) totalKeys != table->
keys + table->
keysZ) {
589 (void) fprintf(table->
err,
"Wrong number of total keys found \ 590 (difference=%d)\n", (
int) (totalKeys-table->
keys));
592 if ((
unsigned) totalSlots != table->
slots) {
593 (void) fprintf(table->
err,
"Wrong number of total slots found \ 594 (difference=%d)\n", (
int) (totalSlots-table->
slots));
597 (void) fprintf(table->
err,
"Wrong number of minimum dead found \ 598 (%u vs. %u)\n", table->
minDead,
599 (
unsigned) (table->
gcFrac * (double) table->
slots));
601 if ((
unsigned) totalDead != table->
dead + table->
deadZ) {
602 (void) fprintf(table->
err,
"Wrong number of total dead found \ 603 (difference=%d)\n", (
int) (totalDead-table->
dead));
605 (void) fprintf(table->
out,
"Average length of non-empty lists = %g\n",
606 (
double) table->
keys / (double) nonEmpty);
644 int ntables = dd->
size;
654 #if SIZEOF_VOID_P == 8 655 retval = fprintf(dd->
out,
"*** DD heap profile for 0x%lx ***\n",
658 retval = fprintf(dd->out,
"*** DD heap profile for 0x%x ***\n",
661 if (retval == EOF)
return 0;
664 for (i=0; i<ntables; i++) {
665 nodes = subtables[i].
keys - subtables[i].
dead;
668 retval = fprintf(dd->out,
"%5d: %5d nodes\n", i, nodes);
669 if (retval == EOF)
return 0;
670 if (nodes > maxnodes) {
677 nodes = dd->constants.keys - dd->constants.dead;
680 retval = fprintf(dd->out,
"const: %5d nodes\n", nodes);
681 if (retval == EOF)
return 0;
682 if (nodes > maxnodes) {
689 retval = fprintf(dd->out,
"Summary: %d tables, %d non-empty, largest: %d ",
690 ntables+1, nonempty, largest);
691 if (retval == EOF)
return 0;
692 retval = fprintf(dd->out,
"(with %d nodes)\n", maxnodes);
693 if (retval == EOF)
return 0;
717 #if SIZEOF_VOID_P == 8 718 (void) fprintf(fp,
" node 0x%lx, id = %u, ref = %u, then = 0x%lx, else = 0x%lx\n",(
ptruint)f,f->
index,f->
ref,(
ptruint)
cuddT(f),(
ptruint)
cuddE(f));
720 (void) fprintf(fp,
" node 0x%x, id = %hu, ref = %hu, then = 0x%x, else = 0x%x\n",(
ptruint)f,f->
index,f->
ref,(
ptruint)
cuddT(f),(
ptruint)
cuddE(f));
766 if (!silent) (void) printf(
"(%d",level);
768 if (!silent) (void) printf(
",");
771 while (node != NULL) {
779 (void) printf(
"%d", (
int) (level + root->
size - 1));
787 if (root->
parent == NULL) (void) printf(
"\n");
821 for (i = 0; i <
cuddI(table,node->
index); i++) {
825 for (j=0;j<slots;j++) {
829 #if SIZEOF_VOID_P == 8 830 (void) fprintf(table->
out,
"parent is at 0x%lx, id = %u, ref = %u, then = 0x%lx, else = 0x%lx\n",
833 (void) fprintf(table->
out,
"parent is at 0x%x, id = %hu, ref = %hu, then = 0x%x, else = 0x%x\n",
867 for (i = 0; i <
cuddI(table,node->
index); i++) {
871 for (j=0;j<slots;j++) {
875 (void) fprintf(table->
err,
876 "error with zero ref count\n");
877 (void) fprintf(table->
err,
"parent is 0x%x, id = %u, ref = %u, then = 0x%x, else = 0x%x\n",f,f->
index,f->
ref,
cuddT(f),
cuddE(f));
878 (void) fprintf(table->
err,
"child is 0x%x, id = %u, ref = %u, then = 0x%x, else = 0x%x\n",node,node->
index,node->
ref,
cuddT(node),
cuddE(node));
int Cudd_CheckKeys(DdManager *table)
void cuddPrintVarGroups(DdManager *dd, MtrNode *root, int zdd, int silent)
#define cuddIZ(dd, index)
int st_lookup_int(st_table *, void *, int *)
void st_free_gen(st_generator *)
static void debugFindParent(DdManager *table, DdNode *node)
void st_free_table(st_table *)
#define Cudd_Regular(node)
int cuddHeapProfile(DdManager *dd)
int st_gen(st_generator *, void *, void *)
static char rcsid [] DD_UNUSED
st_generator * st_init_gen(st_table *)
int Cudd_DebugCheck(DdManager *table)
#define MTR_TEST(node, flag)
int st_insert(st_table *, void *, void *)
#define Cudd_IsComplement(node)
void cuddPrintNode(DdNode *f, FILE *fp)
int st_ptrcmp(const char *, const char *)
st_table * st_init_table(ST_PFICPCP, ST_PFICPI)
int st_ptrhash(char *, int)