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;
	}
}
Example #2
0
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;
}