#include <pthread.h>
#include <semaphore.h>
-#include "rmr.h"
-#include "rmr_agnostic.h"
-
-
/*
Conduct a series of interleaved tests inserting i-factor
values before beginning to pull values (i-factor must be
int errors = 0;
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" );
- return 1;
- }
+ errors += fail_not_nil( r, "attempt to make a ring with size 0 returned a pointer" );
+
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" );
- return 1;
- }
+ errors += fail_not_nil( r, "attempt to make a ring with negative size returned a pointer" );
r = uta_mk_ring( 18 );
- if( r == NULL ) {
- fprintf( stderr, "<FAIL> unable to make ring with 17 entries\n" );
- return 1;
- }
+ errors += fail_if_nil( r, "attempt to make a ring with valid size returned a nil pointer" );
pfd = uta_ring_getpfd( r ); // get pollable file descriptor
- if( pfd < 0 ) {
- fprintf( stderr, "<FAIL> expected a pollable file descriptor >= 0, but got: %d\n", pfd );
- errors++;
- }
+ errors += fail_if_true( pfd < 0, "pollable file descriptor returned was bad" );
pfd = uta_ring_config( r, 0x03 ); // turn on locking for reads and writes
- if( pfd != 1 ) {
- fprintf( stderr, "<FAIL> config attempt to enable locking failed\n" );
- errors++;
- }
-
+ errors += fail_if_true( pfd != 1, "attempt to enable locking failed" );
for( i = 0; i < 20; i++ ) { // test to ensure it reports full when head/tail start at 0
data[i] = i;
}
}
- if( i > size ) {
- fprintf( stderr, "<FAIL> didn not report table full: i=%d\n", i );
- return 1;
- }
-
- fprintf( stderr, "<OK> reported table full at i=%d as expected\n", i );
-
+ errors += fail_if_true( i > size, "ring insert did not report full table" );
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 );
- return 1;
- } else {
- break;
- }
+ errors += fail_if_true( i < size-1, "nil pointer on extract from full table" );
+ break;
}
- if( *dp != i ) {
+ if( fail_if_true( *dp != i, "extracted data is incorrect; see details below" )) {
fprintf( stderr, "<FAIL> data at i=% isnt right; expected %d got %d\n", i, i, *dp );
+ errors++;
}
}
- if( i > size ) {
- fprintf( stderr, "<FAIL> got too many values on extract: %d\n", i );
- return 1;
- }
- fprintf( stderr, "<OK> extracted values were sane, got: %d\n", i-1 );
+ fail_if_true( i > size, "got too many values from extract loop" );
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
- fprintf( stderr, "<FAIL> ie test for 101 inserts didn't return 0\n" );
- return 1;
- }
+ errors += fail_not_equal( ie_test( r, i, 101 ), 0, "ie test for 101 inserts didn't return 0" );
uta_ring_free( r );
}
- fprintf( stderr, "<OK> all modest insert/exctract tests pass\n" );
size = 5;
for( j = 0; j < 20; j++ ) {
for( i = 2; i < size - 2; i++ ) {
r = uta_mk_ring( size );
- if( ie_test( r, i, 66000 ) != 0 ) { // should force the 16bit head/tail indexes to roll over
- fprintf( stderr, "<FAIL> ie test for 66K inserts didn't return 0\n" );
- return 1;
- }
+ errors += fail_not_equal( ie_test( r, i, 66000 ), 0, "ie test for 66K inserts didn't return 0" );
uta_ring_free( r );
}
- fprintf( stderr, "<OK> all large insert/exctract tests pass ring size=%d\n", size );
size++;
}
- fprintf( stderr, "<INFO> all ring tests pass\n" );
return errors;
}