static gras_error_t traverse(gras_dict_t *head) {
- gras_error_t errcode;
gras_dict_cursor_t *cursor=NULL;
char *key;
char *data;
- //gras_dict_dump(head,(void (*)(void*))&printf);
- TRY(gras_dict_cursor_new(head,&cursor));
-
- while (gras_dict_cursor_next(cursor) == no_error) {
- TRY(gras_dict_cursor_get_key(cursor,&key));
- TRY(gras_dict_cursor_get_data(cursor,(void**)&data));
+ gras_dict_foreach(head,cursor,key,data) {
// printf(" Seen: %s=%s\n",key,data);
if (strcmp(key,data)) {
printf("Key(%s) != value(%s). Abording\n",key,data);
abort();
}
}
- gras_dict_cursor_free(cursor);
return no_error;
}
static gras_error_t countelems(gras_dict_t *head,int*count) {
gras_dict_cursor_t *cursor;
- gras_error_t errcode;
char *key;
void *data;
*count=0;
- TRY(gras_dict_cursor_new(head,&cursor));
-
- while ((errcode=gras_dict_cursor_next(cursor))==no_error) {
- TRY(gras_dict_cursor_get_data(cursor,&data));
- TRY(gras_dict_cursor_get_key(cursor,&key));
+ gras_dict_foreach(head,cursor,key,data) {
(*count)++;
}
return no_error;
}
-int main() {
+int main(int argc,char **argv) {
gras_error_t errcode;
gras_dict_t *head=NULL;
int i,j,k, nb;
char *key;
void *data;
- TRY(gras_log_control_set("root.thresh=info"));
+ gras_init_defaultlog(argc,argv,"dict.thresh=verbose");
srand((unsigned int)time(NULL));
printf("Dictionnary: CRASH test:\n");
key[k]=rand() % ('z' - 'a') + 'a';
key[k]='\0';
// printf("[%d %s]\n",j,key);
- TRYFAIL(gras_dict_insert(head,strdup(key),key,&free));
+ TRYFAIL(gras_dict_insert(head,key,key,&free));
}
nb=0;
// gras_dict_dump(head,(void (*)(void*))&printf);
printf("\n Fill 200 000 elements, with keys being the number of element\n");
printf(" (a point is 10 000 elements)\n");
for (j=0;j<NB_ELM;j++) {
- if (!(j%10000)) printf("."); fflush(stdout);
+ if (!(j%10000)) {
+ printf(".");
+ fflush(stdout);
+ }
if (!(key=malloc(10))) {
fprintf(stderr,"Out of memory\n");
abort();
}
}
}
+ free(key);
printf("\n Remove my 200 000 elements. (a point is 10 000 elements)\n");
if (!(key=malloc(10))) {
fprintf(stderr,"Out of memory\n");
- return 3;
+ abort();
}
for (j=0;j<NB_ELM;j++) {
if (!(j%10000)) printf("."); fflush(stdout);
sprintf(key,"%d",j);
TRYFAIL(gras_dict_remove(head,key));
}
+ printf("\n");
+ free(key);
+
+ printf("\n Free the structure (twice)\n");
gras_dict_free(&head);
gras_dict_free(&head);
- printf("\n");
return 0;
}