Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Reuse the dynar of keys to speed the test up;verbose<0 => absolutelely no output...
[simgrid.git] / testsuite / xbt / multidict_crash.c
index 720cbf7..9e8b1a0 100644 (file)
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(Test,"this test");
 
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(Test,"this test");
 
-#define NB_ELM 10/*00*/
+#define NB_ELM 10/*00*/
 #define DEPTH 5
 #define DEPTH 5
-#define KEY_SIZE 6 /*512*/
-#define NB_TEST 20
-int verbose=1;
+#define KEY_SIZE 512
+#define NB_TEST 20 /*20*/
+int verbose=0;
 
 static void str_free(void *s) {
   char *c=*(char**)s;
 
 static void str_free(void *s) {
   char *c=*(char**)s;
@@ -26,7 +26,7 @@ static void str_free(void *s) {
 
 int main(int argc, char *argv[]) {
   xbt_error_t errcode;
 
 int main(int argc, char *argv[]) {
   xbt_error_t errcode;
-  xbt_dict_t mdict=xbt_dict_new();
+  xbt_dict_t mdict = NULL;
   int i,j,k,l;
   xbt_dynar_t keys = xbt_dynar_new(sizeof(char*),str_free);
   void *data;
   int i,j,k,l;
   xbt_dynar_t keys = xbt_dynar_new(sizeof(char*),str_free);
   void *data;
@@ -38,31 +38,38 @@ int main(int argc, char *argv[]) {
   printf(" Fill the struct and frees it %d times, using %d elements, depth of multicache=%d\n",NB_TEST,NB_ELM,DEPTH);
   printf(" with %d chars long randomized keys. (a point is a test)\n",KEY_SIZE);
 
   printf(" Fill the struct and frees it %d times, using %d elements, depth of multicache=%d\n",NB_TEST,NB_ELM,DEPTH);
   printf(" with %d chars long randomized keys. (a point is a test)\n",KEY_SIZE);
 
+  for (l=0 ; l<DEPTH ; l++) {
+    key=xbt_malloc(KEY_SIZE);
+    xbt_dynar_push(keys,&key);
+  }    
+
+
   for (i=0;i<NB_TEST;i++) {
   for (i=0;i<NB_TEST;i++) {
-    if (verbose) {
+    mdict = xbt_dict_new();
+    VERB1("mdict=%p",mdict);
+    if (verbose>0) {
       printf("Test %d\n",i);
       printf("Test %d\n",i);
-    } else {
+    } else if (verbose==0) {
       if (i%10) printf("."); else printf("%d",i/10);
     }
     fflush(stdout);
     
     for (j=0;j<NB_ELM;j++) {
       if (i%10) printf("."); else printf("%d",i/10);
     }
     fflush(stdout);
     
     for (j=0;j<NB_ELM;j++) {
-      if (verbose) printf ("  Add {");
+      if (verbose>0) printf ("  Add {");
       
       for (l=0 ; l<DEPTH ; l++) {
       
       for (l=0 ; l<DEPTH ; l++) {
-        key=xbt_malloc(KEY_SIZE);
+        key=*(char**)xbt_dynar_get_ptr(keys,l);
         
        for (k=0;k<KEY_SIZE-1;k++) 
          key[k]=rand() % ('z' - 'a') + 'a';
          
        key[k]='\0';
        
         
        for (k=0;k<KEY_SIZE-1;k++) 
          key[k]=rand() % ('z' - 'a') + 'a';
          
        key[k]='\0';
        
-       if (verbose) printf("%p=%s %s ",key, key,(l<DEPTH-1?";":"}"));
-       xbt_dynar_push(keys,&key);
+       if (verbose>0) printf("%p=%s %s ",key, key,(l<DEPTH-1?";":"}"));
       }
       }
-      if (verbose) printf("in multitree %p.\n",mdict);
+      if (verbose>0) printf("in multitree %p.\n",mdict);
                                                         
                                                         
-      TRYFAIL(xbt_multidict_set(mdict,keys,xbt_strdup(key),&str_free));
+      TRYFAIL(xbt_multidict_set(mdict,keys,xbt_strdup(key),free));
 
       TRYFAIL(xbt_multidict_get(mdict,keys,&data));
 
 
       TRYFAIL(xbt_multidict_get(mdict,keys,&data));
 
@@ -70,9 +77,12 @@ int main(int argc, char *argv[]) {
                  "Retrieved value (%s) does not match the entrered one (%s)\n",
                  (char*)data,key);
     }
                  "Retrieved value (%s) does not match the entrered one (%s)\n",
                  (char*)data,key);
     }
+    xbt_dict_free(&mdict);
   }
   }
+  
+  xbt_dynar_free(&keys);
 
 
-/*  if (verbose)
+/*  if (verbose>0)
     xbt_dict_dump(mdict,&xbt_dict_print);*/
     
   xbt_dict_free(&mdict);
     xbt_dict_dump(mdict,&xbt_dict_print);*/
     
   xbt_dict_free(&mdict);