Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
2004-04-09 Martin Quinson <martin.quinson@tuxfamily.org>
[simgrid.git] / testsuite / xbt / dict_crash.c
index 71fd120..0139085 100644 (file)
@@ -22,52 +22,40 @@ static void print_str(void *str) {
 
 
 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");
@@ -89,7 +77,7 @@ int main() {
        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);
@@ -107,7 +95,10 @@ int main() {
   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();
@@ -138,11 +129,12 @@ int main() {
       }
     }
   }
+  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);
@@ -150,9 +142,12 @@ int main() {
     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;
 }