-/*
- Conduct a series of interleaved tests inserting i-factor
- values before beginning to pull values (i-factor must be
- size - 2 smaller than the ring.
- Returns 0 on success, 1 on insert failure and 2 on pull failure.
-*/
-static int ie_test( void* r, int i_factor, long inserts ) {
- int i;
- int* dp;
- int data[29];
-
- for( i = 0; i < inserts; i++ ) {
- data[i%29] = i;
- if( ! uta_ring_insert( r, &data[i%29] ) ) {
- fprintf( stderr, "[FAIL] interleaved insert failed on ifactor=%d i=%d\n", i_factor, i );
- return 1;
- }
- if( i > i_factor-1 ) {
- dp = uta_ring_extract( r );
- if( *dp != data[(i-i_factor)%29] ) {
- fprintf( stderr, "[FAIL] interleaved exctract failed on ifactor=%d i=%d expected=%d got=%d\n", i_factor, i, data[(i-i_factor)%29], *dp );
- return 2;
- }
- }
- }
- //fprintf( stderr, "[OK] interleaved insert/extract test passed for insert factor %d\n", i_factor );
-
- return 0;
-}
-
-int main( void ) {
- void* r;
- int i;
- int j;
- int data[20];
- int* dp;
- int size = 18;
-
- r = uta_mk_ring( 0 ); // should return nil
- if( r != NULL ) {
- fprintf( stderr, "[FAIL] attempt to make a ring with size 0 returned a pointer\n" );
- exit( 1 );
- }
- r = uta_mk_ring( -1 ); // should also return nil
- if( r != NULL ) {
- fprintf( stderr, "[FAIL] attempt to make a ring with size <0 returned a pointer\n" );
- exit( 1 );
- }
-
- r = uta_mk_ring( 18 );
- if( r == NULL ) {
- fprintf( stderr, "[FAIL] unable to make ring with 17 entries\n" );
- exit( 1 );
- }
-
- for( i = 0; i < 20; i++ ) { // test to ensure it reports full when head/tail start at 0
- data[i] = i;
- if( ! uta_ring_insert( r, &data[i] ) ) {
- break;
- }
- }
-
- if( i > size ) {
- fprintf( stderr, "[FAIL] didn not report table full: i=%d\n", i );
- exit( 1 );
- }
-
- fprintf( stderr, "[OK] reported table full at i=%d as expected\n", i );
-
-
- for( i = 0; i < size + 3; i++ ) { // ensure they all come back in order, and we don't get 'extras'
- if( (dp = uta_ring_extract( r )) == NULL ) {
- if( i < size-1 ) {
- fprintf( stderr, "[FAIL] nil pointer at i=%d\n", i );
- exit( 1 );
- } else {
- break;
- }
- }
-
- if( *dp != i ) {
- fprintf( stderr, "[FAIL] data at i=% isnt right; expected %d got %d\n", i, i, *dp );
- }
- }
- if( i > size ) {
- fprintf( stderr, "[FAIL] got too many values on extract: %d\n", i );
- exit( 1 );
- }
- fprintf( stderr, "[OK] extracted values were sane, got: %d\n", i-1 );
-
- uta_ring_free( NULL ); // ensure this doesn't blow up
- uta_ring_free( r );
- for( i = 2; i < 15; i++ ) {
- r = uta_mk_ring( 16 );
- if( ie_test( r, i, 101 ) != 0 ) { // modest number of inserts
- exit( 1 );
- }
-
- uta_ring_free( r );
- }
- fprintf( stderr, "[OK] all modest insert/exctract tests pass\n" );