int rand_ranged_value ( int min, int max ) { return ( rand() % ( max - min + 1 ) + min ); } // Accepts smallest and largest bucket, and number of ints // to test/produce. // Returns (on the stack) a list of int/count pairs (pull // into a hash). void ints_per_bucket ( int min_bucket, int max_bucket, int quantity_ints ) { int range_size = max_bucket + 1; int* int_sieve; int i; Newxz( int_sieve, range_size, int ); if( !int_sieve ) croak( "ints_per_bucket: Couldn't allocate memory.\n" ); for( i = 0; i < quantity_ints; i++ ) int_sieve[ rand_ranged_value(min_bucket,max_bucket) ]++; Inline_Stack_Vars; Inline_Stack_Reset; for( i = 0; i < range_size; i++ ) if( int_sieve[i] > 0 ) { // Key ( integer value counted ). Inline_Stack_Push( sv_2mortal( newSViv( i ) ) ); // Value ( count for integer value ). Inline_Stack_Push( sv_2mortal( newSViv( int_sieve[i] ) ) ); } Safefree( int_sieve ); Inline_Stack_Done; }