void shadow_satisfy(shadow_mgr mgr, ref_t r) { if (!mgr->do_cudd) return; DdNode *n = get_ddnode(mgr, r); bool zdd = is_zdd(mgr, r); FILE *logfile = get_logfile(); if (zdd) { Cudd_zddPrintMinterm(mgr->bdd_manager, n); if (logfile) { FILE *savefile = Cudd_ReadStdout(mgr->bdd_manager); Cudd_SetStdout(mgr->bdd_manager, logfile); Cudd_zddPrintMinterm(mgr->bdd_manager, n); Cudd_SetStdout(mgr->bdd_manager, savefile); } } else { Cudd_PrintMinterm(mgr->bdd_manager, n); if (logfile) { FILE *savefile = Cudd_ReadStdout(mgr->bdd_manager); Cudd_SetStdout(mgr->bdd_manager, logfile); Cudd_PrintMinterm(mgr->bdd_manager, n); Cudd_SetStdout(mgr->bdd_manager, savefile); } } }
/** * @brief Basic ADD test. * @return 0 if successful; -1 otherwise. */ static int testAdd(int verbosity) { DdManager *manager; DdNode *f, *var, *tmp, *bg; int i, ret; CUDD_VALUE_TYPE pinf; manager = Cudd_Init(0, 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0); if (!manager) { if (verbosity) { printf("initialization failed\n"); } return -1; } pinf = Cudd_V(Cudd_ReadPlusInfinity(manager)); if (verbosity) { printf("Plus infinity is %g\n", pinf); } f = Cudd_addConst(manager,5); Cudd_Ref(f); for (i = 3; i >= 0; i--) { var = Cudd_addIthVar(manager,i); Cudd_Ref(var); tmp = Cudd_addApply(manager,Cudd_addTimes,var,f); Cudd_Ref(tmp); Cudd_RecursiveDeref(manager,f); Cudd_RecursiveDeref(manager,var); f = tmp; } if (verbosity) { Cudd_PrintMinterm(manager, f); printf("\n"); } Cudd_RecursiveDeref(manager, f); bg = Cudd_ReadBackground(manager); if (verbosity) { printf("background (%g) minterms : ", Cudd_V(bg)); Cudd_ApaPrintMinterm(Cudd_ReadStdout(manager), manager, bg, 0); } ret = Cudd_CheckZeroRef(manager); if (ret != 0 && verbosity) { printf("%d non-zero ADD reference counts after dereferencing\n", ret); } Cudd_Quit(manager); return ret != 0; }