Beispiel #1
0
static bool heap_ok(const struct heap *h, heap_less_func_t less, int i)
{
	int l, r;

	l = 2 * i + 1;
	r = l + 1;

	if (l < h->len) {
		if (less(h->data[l], h->data[i])) {
			fprintf(stderr, "heap property violation\n");
			return false;
		}
		if (!heap_ok(h, less, l))
			return false;
	}
	if (r < h->len) {
		if (less(h->data[r], h->data[i])) {
			fprintf(stderr, "heap property violation\n");
			return false;
		}
		if (!heap_ok(h, less, r))
			return false;
	}
	return true;
}
Beispiel #2
0
int main( )
{
    int rc = 0;
    //heap_dump();
    int original_count = heap_count( );
    
    try {
        if( !construct_test( )  || !heap_ok( "t1" ) ) rc = 1;
        if( !access_test( )     || !heap_ok( "t2" ) ) rc = 1;
        //if( !string_test( )     || !heap_ok( "t3" ) ) rc = 1;
        //if( !torture_test( )    || !heap_ok( "t4" ) ) rc = 1;
        //if( !clear_test( )      || !heap_ok( "t5" ) ) rc = 1;
        if( !iterator_test( )   || !heap_ok( "t6" ) ) rc = 1;
        if( !copy_test( )       || !heap_ok( "t7" ) ) rc = 1;
        if( !allocator_test( )  || !heap_ok( "t8" ) ) rc = 1;
        if( !bounds_test( )     || !heap_ok( "t9" ) ) rc = 1;
        if( !hint_ins_test( )   || !heap_ok( "tA" ) ) rc = 1;
    }
    catch( ... ) {
        std::cout << "Unexpected exception of unexpected type.\n";
        rc = 1;
    }
    int heap_diff = heap_count( ) - original_count;
    if( heap_diff ) {
        heap_dump();
        std::cout << "Possible memory leak! " << heap_diff << " " << original_count << "\n";
        rc = 1;
    }
    
    return( rc );
}
Beispiel #3
0
int main( )
{
  int rc = 0;
  int original_count = heap_count( );

  try {
    if( !rebind_test( )   || !heap_ok( "t01" ) ) rc = 1;
    if( !auto_ptr_test( ) || !heap_ok( "t02" ) ) rc = 1;
  }
  catch( ... ) {
    std::cout << "Unexpected exception of unexpected type.\n";
    rc = 1;
  }

  if( heap_count( ) != original_count ) {
    std::cout << "Possible memory leak!\n";
    rc = 1;
  }
  return( rc );
}
Beispiel #4
0
int main( )
{
    int rc = 0;
    int original_count = heap_count( );

    try {
        if( !basic_test< std::deque< int > >( )  || !heap_ok( "t01" ) ) rc = 1;
        if( !basic_test< std::list< int > >( )   || !heap_ok( "t02" ) ) rc = 1;
        if( !relational_test( )                  || !heap_ok( "t03" ) ) rc = 1;
        if( !basic_priority_test( )              || !heap_ok( "t04" ) ) rc = 1;
    }
    catch( ... ) {
        std::cout << "Unexpected exception of unexpected type.\n";
        rc = 1;
    }

    if( heap_count( ) != original_count ) {
        std::cout << "Possible memory leak!\n";
        rc = 1;
    }
    return( rc );
}
Beispiel #5
0
static bool some_test(size_t n, bool is_less)
{
	struct item *items = calloc(n, sizeof(*items));
	struct item *item, *prev;
	struct heap *h;
	int i;

	if (items == NULL) {
		perror("items");
		exit(EXIT_FAILURE);
	}

	if (is_less)
		h = heap_init(__less);
	else
		h = heap_init(__more);
	if (h == NULL) {
		perror("heap_init");
		exit(EXIT_FAILURE);
	}

	for (i = 0; i < n; i++) {
		item = &items[i];

		item->v = rand();
		/* printf("pushing %d\n", item->v); */
		heap_push(h, item);
		if (!heap_ok(h, is_less ? __less : __more, 0))
			return false;
	}
	if (is_less) {
		heap_ify(h, __more);
		if (!heap_ok(h, __more, 0))
			return false;
		heap_ify(h, __less);
		if (!heap_ok(h, __less, 0))
			return false;
	} else {
		heap_ify(h, NULL);
		if (!heap_ok(h, __more, 0))
			return false;
	}

	for (i = 0; i < n; i++) {
		item = heap_pop(h);
		if (!heap_ok(h, is_less ? __less : __more, 0))
			return false;
		/* printf("popped %d\n", item->v); */
		if (i > 0) {
			if (is_less) {
				if (less(item, prev))
					return false;
			} else {
				if (more(item, prev))
					return false;
			}
		}
		prev = item;
	}
	heap_free(h);
	free(items);
	return true;
}
Beispiel #6
0
int main( )
{
  int rc = 0;
  int original_count = heap_count( );

  try {
    if( !construct_test( )         || !heap_ok( "t01" ) ) rc = 1;
    if( !assign_test( )            || !heap_ok( "t02" ) ) rc = 1;
    if( !access_test( )            || !heap_ok( "t03" ) ) rc = 1;
    if( !relational_test( )        || !heap_ok( "t04" ) ) rc = 1;
    if( !capacity_test( )          || !heap_ok( "t05" ) ) rc = 1;
    if( !iterator_test( )          || !heap_ok( "t06" ) ) rc = 1;
    if( !append_test( )            || !heap_ok( "t07" ) ) rc = 1;
    if( !insert_test( )            || !heap_ok( "t08" ) ) rc = 1;
    if( !erase_test( )             || !heap_ok( "t09" ) ) rc = 1;
    if( !replace_test( )           || !heap_ok( "t10" ) ) rc = 1;
    if( !iterator_replace_test( )  || !heap_ok( "t11" ) ) rc = 1;
    if( !copy_test( )              || !heap_ok( "t12" ) ) rc = 1;
    if( !swap_test( )              || !heap_ok( "t13" ) ) rc = 1;
    if( !cstr_test( )              || !heap_ok( "t14" ) ) rc = 1;
    if( !find_test( )              || !heap_ok( "t15" ) ) rc = 1;
    if( !rfind_test( )             || !heap_ok( "t16" ) ) rc = 1;
    if( !find_first_of_test( )     || !heap_ok( "t17" ) ) rc = 1;
    if( !find_last_of_test( )      || !heap_ok( "t18" ) ) rc = 1;
    if( !find_first_not_of_test( ) || !heap_ok( "t19" ) ) rc = 1;
    if( !find_last_not_of_test( )  || !heap_ok( "t20" ) ) rc = 1;
    if( !substr_test( )            || !heap_ok( "t21" ) ) rc = 1;
  }
  catch( std::out_of_range e ) {
    std::cout << "Unexpected out_of_range exception: " << e.what( ) << "\n";
    rc = 1;
  }
  catch( std::length_error e ) {
    std::cout << "Unexpected length_error exception: " << e.what( ) << "\n";
    rc = 1;
  }
  catch( ... ) {
    std::cout << "Unexpected exception of unexpected type.\n";
    rc = 1;
  }

  if( heap_count( ) != original_count ) {
    std::cout << "Possible memory leak!\n";
    rc = 1;
  }
  return( rc );
}