void testEmptyCI( const CellInterval & ci ) { WALBERLA_CHECK( ci.empty() ); for(int i = 0; i < 100; ++i) WALBERLA_CHECK( !ci.contains(makeRandomCell()) ); for(int i = 0; i < 100; ++i) WALBERLA_CHECK( !ci.overlaps(makeRandomInterval(1000000)) ); std::stringstream ss; const int forty_two = 42; const int twenty_three = 23; ss << forty_two << ci << twenty_three; CellInterval rci; int i0, i1; ss >> i0 >> rci >> i1; WALBERLA_CHECK_EQUAL( ci, rci ); WALBERLA_CHECK_EQUAL( i0, forty_two ); WALBERLA_CHECK_EQUAL( i1, twenty_three ); WALBERLA_CHECK( !ss.bad() ); WALBERLA_CHECK( ss.eof() ); size_t numIterations = 0; for( auto it = ci.begin(); it != ci.end() && numIterations < 1; ++it ) ++numIterations; WALBERLA_CHECK_EQUAL( numIterations, 0 ); }
void testIterators( const CellInterval & ci ) { uint_t ctr = 0; auto it = ci.begin(); for( cell_idx_t z = ci.zMin(); z <= ci.zMax(); ++z) for( cell_idx_t y = ci.yMin(); y <= ci.yMax(); ++y) for( cell_idx_t x = ci.xMin(); x <= ci.xMax(); ++x, ++it) { WALBERLA_CHECK( ci.contains( *it ) ); WALBERLA_CHECK_EQUAL( x, it->x() ); WALBERLA_CHECK_EQUAL( y, it->y() ); WALBERLA_CHECK_EQUAL( z, it->z() ); ++ctr; } WALBERLA_CHECK_EQUAL( it, ci.end() ); WALBERLA_CHECK_EQUAL( ctr, ci.numCells() ); WALBERLA_CHECK_EQUAL( std::distance( ci.begin(), ci.end() ), ci.numCells() ); ctr = 0; auto it2 = ci.end(); --it2; for( cell_idx_t z = ci.zMax(); z >= ci.zMin(); --z) for( cell_idx_t y = ci.yMax(); y >= ci.yMin(); --y) for( cell_idx_t x = ci.xMax(); x >= ci.xMin(); --x, --it2) { WALBERLA_CHECK( ci.contains( *it2 ) ); WALBERLA_CHECK_EQUAL( x, it2->x() ); WALBERLA_CHECK_EQUAL( y, it2->y() ); WALBERLA_CHECK_EQUAL( z, it2->z() ); ++ctr; } WALBERLA_CHECK_EQUAL( ctr, ci.numCells() ); WALBERLA_CHECK_EQUAL( it2, --ci.begin() ); }