diff options
Diffstat (limited to 'src/aig/dar/darCheck.c')
-rw-r--r-- | src/aig/dar/darCheck.c | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/src/aig/dar/darCheck.c b/src/aig/dar/darCheck.c new file mode 100644 index 00000000..6cfba787 --- /dev/null +++ b/src/aig/dar/darCheck.c @@ -0,0 +1,112 @@ +/**CFile**************************************************************** + + FileName [darCheck.c] + + SystemName [ABC: Logic synthesis and verification system.] + + PackageName [DAG-aware AIG rewriting.] + + Synopsis [AIG checking procedures.] + + Author [Alan Mishchenko] + + Affiliation [UC Berkeley] + + Date [Ver. 1.0. Started - April 28, 2007.] + + Revision [$Id: darCheck.c,v 1.00 2007/04/28 00:00:00 alanmi Exp $] + +***********************************************************************/ + +#include "dar.h" + +//////////////////////////////////////////////////////////////////////// +/// DECLARATIONS /// +//////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////// +/// FUNCTION DEFINITIONS /// +//////////////////////////////////////////////////////////////////////// + +/**Function************************************************************* + + Synopsis [Checks the consistency of the AIG manager.] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +int Dar_ManCheck( Dar_Man_t * p ) +{ + Dar_Obj_t * pObj, * pObj2; + int i; + // check primary inputs + Dar_ManForEachPi( p, pObj, i ) + { + if ( Dar_ObjFanin0(pObj) || Dar_ObjFanin1(pObj) ) + { + printf( "Dar_ManCheck: The PI node \"%p\" has fanins.\n", pObj ); + return 0; + } + } + // check primary outputs + Dar_ManForEachPo( p, pObj, i ) + { + if ( !Dar_ObjFanin0(pObj) ) + { + printf( "Dar_ManCheck: The PO node \"%p\" has NULL fanin.\n", pObj ); + return 0; + } + if ( Dar_ObjFanin1(pObj) ) + { + printf( "Dar_ManCheck: The PO node \"%p\" has second fanin.\n", pObj ); + return 0; + } + } + // check internal nodes + Dar_ManForEachObj( p, pObj, i ) + { + if ( !Dar_ObjIsNode(pObj) ) + continue; + if ( !Dar_ObjFanin0(pObj) || !Dar_ObjFanin1(pObj) ) + { + printf( "Dar_ManCheck: The AIG has internal node \"%p\" with a NULL fanin.\n", pObj ); + return 0; + } + if ( Dar_ObjFanin0(pObj)->Id >= Dar_ObjFanin1(pObj)->Id ) + { + printf( "Dar_ManCheck: The AIG has node \"%p\" with a wrong ordering of fanins.\n", pObj ); + return 0; + } + pObj2 = Dar_TableLookup( p, pObj ); + if ( pObj2 != pObj ) + { + printf( "Dar_ManCheck: Node \"%p\" is not in the structural hashing table.\n", pObj ); + return 0; + } + } + // count the total number of nodes + if ( Dar_ManObjNum(p) != 1 + Dar_ManPiNum(p) + Dar_ManPoNum(p) + Dar_ManAndNum(p) + Dar_ManExorNum(p) ) + { + printf( "Dar_ManCheck: The number of created nodes is wrong.\n" ); + return 0; + } + // count the number of nodes in the table + if ( Dar_TableCountEntries(p) != Dar_ManAndNum(p) + Dar_ManExorNum(p) ) + { + printf( "Dar_ManCheck: The number of nodes in the structural hashing table is wrong.\n" ); + return 0; + } +// if ( !Dar_ManIsAcyclic(p) ) +// return 0; + return 1; +} + +//////////////////////////////////////////////////////////////////////// +/// END OF FILE /// +//////////////////////////////////////////////////////////////////////// + + |