void virtual_random_access_iteratorTest::testInt() { int source[100]; size_t num = sizeof(source) / sizeof(source[0]); for (size_t i = 0; i < num; ++i) { source[i] = i; } std::random_shuffle(source, source + num); { std::vector<int> correct(source, source + num); std::vector<int> test(source, source + num); std::sort(correct.begin(), correct.end()); vsorti(test.begin(), test.end()); CPPUNIT_ASSERT(correct == test); } { int *correct = new int[num]; int *test = new int[num]; std::copy(source, source + num, correct); std::copy(source, source + num, test); std::sort(correct, correct + num); vsorti(test, test + num); CPPUNIT_ASSERT(std::equal(correct, correct + num, test)); delete [] correct; delete [] test; } }
int initPointSearch( ObjectDB *odb, int ipos ) { float m[ 3 ] = { 0.0f }, sd[ 3 ] = { 0.0f }; int i, j; if ( odb->npoints <= 0 ) return 1; for ( i = 0; i < odb->npoints; i++ ) for ( j = 0; j < 3; j++ ) m[ j ] += odb->pt[ i ].pos[ ipos ][ j ]; for ( j = 0; j < 3; j++ ) m[ j ] /= odb->npoints; for ( i = 0; i < odb->npoints; i++ ) for ( j = 0; j < 3; j++ ) sd[ j ] += odb->pt[ i ].pos[ ipos ][ j ] - m[ j ]; odb->vsortkey = sd[ 0 ] > sd[ 1 ] ? ( sd[ 0 ] > sd[ 2 ] ? 0 : 2 ) : ( sd[ 1 ] > sd[ 2 ] ? 1 : 2 ); odb->vsortkey += 3 * ipos; odb->vsort = (int*)calloc( odb->npoints, sizeof( int )); if ( !odb->vsort ) return 0; for ( i = 0; i < odb->npoints; i++ ) odb->vsort[ i ] = i; vsortq( odb ); vsorti( odb ); return 1; }