Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix broken doc
[simgrid.git] / src / xbt / dynar.c
index f4f1cdd..0519a4a 100644 (file)
@@ -441,7 +441,6 @@ xbt_dynar_replace(xbt_dynar_t dynar,
 {
   _dynar_lock(dynar);
   _sanity_check_dynar(dynar);
-  _sanity_check_idx(idx);
 
   if (idx < dynar->used && dynar->free_f) {
     void *const old_object = _xbt_dynar_elm(dynar, idx);
@@ -709,6 +708,7 @@ XBT_INLINE void xbt_dynar_cursor_unlock(xbt_dynar_t dynar)
 
 /** @brief Sorts a dynar according to the function <tt>compar_fn</tt>
  *
+ * \param dynar the dynar to sort
  * \param compar_fn comparison function of type (int (compar_fn*) (void*) (void*)).
  *
  * Remark: if the elements stored in the dynar are structures, the compar_fn
@@ -734,16 +734,29 @@ XBT_INLINE int xbt_dynar_compare(xbt_dynar_t d1, xbt_dynar_t d2,
        int i ;
        int size;
        if((!d1) && (!d2)) return 0;
-       if((!d1) || (!d2)) return 1;
-       if((d1->elmsize)!=(d2->elmsize)) return 1; // xbt_die
-       if(xbt_dynar_length(d1) != xbt_dynar_length(d2)) return 1;
+       if((!d1) || (!d2))
+       {
+               DEBUG2("NULL dynar d1=%p d2=%p",d1,d2);
+               return 1;
+       }
+       if((d1->elmsize)!=(d2->elmsize))
+       {
+               DEBUG2("Size of elmsize d1=%ld d2=%ld",d1->elmsize,d2->elmsize);
+               return 1; // xbt_die
+       }
+       if(xbt_dynar_length(d1) != xbt_dynar_length(d2))
+       {
+               DEBUG2("Size of dynar d1=%ld d2=%ld",xbt_dynar_length(d1),xbt_dynar_length(d2));
+               return 1;
+       }
 
        size = xbt_dynar_length(d1);
        for(i=0;i<size;i++)
        {
                void *data1 = xbt_dynar_get_as(d1, i, void *);
                void *data2 = xbt_dynar_get_as(d2, i, void *);
-               if(!compar(data1,data2)) return 1;
+               DEBUG3("link[%d] d1=%p d2=%p",i,data1,data2);
+               if(compar(data1,data2)) return 1;
        }
        return 0;
 }
@@ -914,7 +927,8 @@ XBT_TEST_UNIT("int", test_dynar_int, "Dynars of integers")
 XBT_TEST_UNIT("insert",test_dynar_insert,"Using the xbt_dynar_insert and xbt_dynar_remove functions")
 {
   xbt_dynar_t d = xbt_dynar_new(sizeof(int), NULL);
-  int cursor,cpt;
+  unsigned int cursor;
+  int cpt;
 
   xbt_test_add1("==== Insert %d int, traverse them, remove them",NB_ELEM);
   /* Populate_ints [doxygen cruft] */
@@ -932,6 +946,14 @@ XBT_TEST_UNIT("insert",test_dynar_insert,"Using the xbt_dynar_insert and xbt_dyn
   }
   /* end_of_traversal */
 
+  /* Re-fill with the same values using set_as (and re-verify) */
+  for (cpt = 0; cpt < NB_ELEM; cpt++)
+    xbt_dynar_set_as(d, cpt, int, cpt);
+  xbt_dynar_foreach(d, cursor, cpt)
+    xbt_test_assert2(cursor == cpt,
+                     "The retrieved value is not the same than the injected one (%d!=%d)",
+                     cursor, cpt);
+
   for (cpt = 0; cpt < NB_ELEM; cpt++) {
     int val;
     xbt_dynar_remove_at(d,0,&val);
@@ -940,7 +962,7 @@ XBT_TEST_UNIT("insert",test_dynar_insert,"Using the xbt_dynar_insert and xbt_dyn
                      cursor, cpt);
   }
   xbt_test_assert1(xbt_dynar_length(d) == 0,
-                   "There is still %d elements in the dynar after removing everything",
+                   "There is still %lu elements in the dynar after removing everything",
                    xbt_dynar_length(d));
   xbt_dynar_free(&d);
 
@@ -968,7 +990,7 @@ XBT_TEST_UNIT("insert",test_dynar_insert,"Using the xbt_dynar_insert and xbt_dyn
                      cursor, cpt);
   }
   xbt_test_assert1(xbt_dynar_length(d) == 0,
-                   "There is still %d elements in the dynar after removing everything",
+                   "There is still %lu elements in the dynar after removing everything",
                    xbt_dynar_length(d));
   xbt_dynar_free(&d);
 }