#include namespace boptions = boost::program_options; #include "hurricane/DebugSession.h" #include "hurricane/Interval.h" #include "hurricane/RbTree.h" #include "hurricane/IntervalTree.h" #include "crlcore/Utilities.h" namespace Hurricane { typedef IntervalData IntvString; typedef RbTree RbInterval; typedef IntervalTree IntervalTreeString; typedef GenericCollection Intervals; typedef GenericCollection IntvStrings; } INSPECTOR_PR_SUPPORT(Hurricane::RbInterval); INSPECTOR_PR_SUPPORT(Hurricane::RbInterval::Node); INSPECTOR_PR_SUPPORT(Hurricane::IntvString); INSPECTOR_PR_SUPPORT(Hurricane::IntervalTreeString); INSPECTOR_PR_SUPPORT(Hurricane::IntervalTreeString::Node); using namespace std; using namespace Hurricane; using namespace CRL; namespace { using namespace std; using namespace Hurricane; inline DbU::Unit l ( long v ) { return DbU::fromLambda(v); } // ------------------------------------------------------------------- // Test : "testRbTree". int testRbTree () { //typedef IntervalTree RbInterval; RbInterval rb; long count = 13; for ( long key=0 ; key intv : itree.getElements() ) { cerr << intv << endl; } IntervalTreeString::overlap_iterator ob = itree.beginOverlaps( Interval(l(2),l(4)) ); cerr << "overlap of [2:4]: [ "; for ( ; ob != itree.end() ; ++ob ) cerr << *ob << " "; cerr << "]" << endl; cerr << endl << endl; ob = itree.beginOverlaps( Interval(l(-2),l(-1)) ); cerr << "overlap of [-2:-1]: [ "; for ( ; ob != itree.end() ; ++ob ) cerr << *ob << " "; cerr << "]" << endl; cerr << endl << endl; ob = itree.beginOverlaps( Interval(l(6),l(9)) ); cerr << "overlap of [6:9]: [ "; for ( ; ob != itree.end() ; ++ob ) cerr << *ob << " "; cerr << "]" << endl; cerr << endl << endl; cerr << "overlap of [6:9]: [ "; for ( const IntvString& intv : itree.getOverlaps( Interval( l(6), l(9) ) ) ) cerr << intv << " "; cerr << "]" << endl; return 0; } } // Anonymous namespace. int main ( int argc, char* argv[] ) { int returnCode = 0; try { bool coreDump = false; bool rbTree = false; bool intvTree = false; boptions::options_description options ("Command line arguments & options"); options.add_options() ( "help,h" , "Print this help." ) ( "core-dump,D", boptions::bool_switch(&coreDump)->default_value(false) , "Enable core dumping.") ( "rb-tree" , boptions::bool_switch(&rbTree )->default_value(false) , "Test of the red/black tree \"hurricane/RbTree.h\".") ( "intv-tree" , boptions::bool_switch(&intvTree)->default_value(false) , "Test of the interval tree \"hurricane/IntervalTree.h\"."); boptions::variables_map arguments; boptions::store ( boptions::parse_command_line(argc,argv,options), arguments ); boptions::notify( arguments ); if (arguments.count("help")) { cerr << options << endl; exit( 0 ); } System::get()->setCatchCore( not coreDump ); DebugSession::open( 0, 1000 ); if (rbTree ) returnCode += testRbTree(); if (intvTree) returnCode += testIntervalTree(); DebugSession::close(); } catch ( Error& e ) { cerr << e.what() << endl; exit( 127 ); } catch ( boptions::error& e ) { cerr << "[ERROR] " << e.what() << endl; exit( 127 ); } catch ( exception& e ) { cerr << "[ERROR] " << e.what() << endl; exit( 127 ); } catch ( ... ) { cerr << "[ERROR] Abnormal termination: unmanaged exception.\n" << endl; exit( 126 ); } return returnCode; }