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; }
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 ); }
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 ); }
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 ); }
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; }
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 ); }