int main ( int argc, char * argv[]) { unsigned int seed,nelt,keylen; if ( argc!=4){ printf ("Usage: rbtree seed nelt keylen\n"); return EXIT_FAILURE; } sscanf(argv[1],"%u",&seed); srandom(seed); sscanf(argv[2],"%u",&nelt); sscanf(argv[3],"%u",&keylen); RBTREE tree = create_rbtree(lexo,strcopykey,strfreekey); char ** keys = random_keys(nelt,keylen); printf ("Inserting elements\n"); for ( int i=0 ; i<nelt ; i++){ printf ("\tinserting %s\n",keys[i]); insertelt_rbtree(tree,keys[i],"a"); check_rbtree(tree); } unsigned int ntree_elt = nmemb_rbtree(tree); printf ("Tree contains %u elements in total\n",ntree_elt); assert(ntree_elt<=nelt); printf ("Copying tree\n"); RBTREE tree2 = copy_rbtree(tree,strcopykey); check_rbtree(tree2); printf("Freeing copied tree\n"); free_rbtree(tree2,free); printf("Printing tree\n"); unsafemap_rbtree (tree,print_node); printf("Iterating through tree\n"); unsigned int iter_count = 0; for ( RBITER iter = iter_rbtree(tree) ; next_rbtree(iter) ; ){ const char * key = (const char *) iterkey_rbtree(iter); printf("\tfound %s\n",key); iter_count++; } assert(iter_count==ntree_elt); printf ("Removing elements\n"); unsigned int * rperm = random_permutation(nelt); fputs("Permutation: ",stdout); print_rperm(rperm,nelt); for ( int i=0 ; i<nelt ; i++){ printf("\tremoving %s\n",keys[rperm[i]]); removeelt_rbtree(tree,keys[rperm[i]]); check_rbtree(tree); } assert(nmemb_rbtree(tree)==0); free_rbtree(tree,free); }
void hash_tab::get_collisions_test(const char *TXT_FILENAME) { random_keys(3*TAB_SIZE); std::ofstream fout; fout.open(TXT_FILENAME); if (fout) { for(int i=0; i < TAB_SIZE; i++) { fout << tab[i].collisions_count; fout << "\n"; } } fout.close(); }