+/*******************************************************************************/
+/*******************************************************************************/
+/*******************************************************************************/
+XBT_TEST_UNIT("double", test_dynar_double, "Dynars of doubles")
+{
+ xbt_dynar_t d;
+ int cpt;
+ unsigned int cursor;
+ double d1, d2;
+
+ xbt_test_add0("==== Traverse the empty dynar");
+ d = xbt_dynar_new(sizeof(int), NULL);
+ xbt_dynar_foreach(d, cursor, cpt) {
+ xbt_test_assert0(FALSE,
+ "Damnit, there is something in the empty dynar");
+ }
+ xbt_dynar_free(&d); /* This code is used both as example and as regression test, so we try to */
+ xbt_dynar_free(&d); /* free the struct twice here to check that it's ok, but freeing it only once */
+ /* in your code is naturally the way to go outside a regression test */
+
+ xbt_test_add0("==== Push/shift 5000 doubles");
+ d = xbt_dynar_new(sizeof(double), NULL);
+ for (cpt = 0; cpt < 5000; cpt++) {
+ d1 = (double) cpt;
+ xbt_dynar_push(d, &d1);
+ }
+ xbt_dynar_foreach(d, cursor, d2) {
+ d1 = (double) cursor;
+ xbt_test_assert2(d1 == d2,
+ "The retrieved value is not the same than the injected one (%f!=%f)",
+ d1, d2);
+ }
+ for (cpt = 0; cpt < 5000; cpt++) {
+ d1 = (double) cpt;
+ xbt_dynar_shift(d, &d2);
+ xbt_test_assert2(d1 == d2,
+ "The retrieved value is not the same than the injected one (%f!=%f)",
+ d1, d2);
+ }
+ xbt_dynar_free(&d); /* This code is used both as example and as regression test, so we try to */
+ xbt_dynar_free(&d); /* free the struct twice here to check that it's ok, but freeing it only once */
+ /* in your code is naturally the way to go outside a regression test */
+
+ xbt_test_add0("==== Unshift/pop 5000 doubles");
+ d = xbt_dynar_new(sizeof(double), NULL);
+ for (cpt = 0; cpt < 5000; cpt++) {
+ d1 = (double) cpt;
+ xbt_dynar_unshift(d, &d1);
+ }
+ for (cpt = 0; cpt < 5000; cpt++) {
+ d1 = (double) cpt;
+ xbt_dynar_pop(d, &d2);
+ xbt_test_assert2(d1 == d2,
+ "The retrieved value is not the same than the injected one (%f!=%f)",
+ d1, d2);
+ }
+ xbt_dynar_free(&d); /* This code is used both as example and as regression test, so we try to */
+ xbt_dynar_free(&d); /* free the struct twice here to check that it's ok, but freeing it only once */
+ /* in your code is naturally the way to go outside a regression test */
+
+
+
+ xbt_test_add0
+ ("==== Push 5000 doubles, insert 1000 doubles in the middle, shift everything");
+ d = xbt_dynar_new(sizeof(double), NULL);
+ for (cpt = 0; cpt < 5000; cpt++) {
+ d1 = (double) cpt;
+ xbt_dynar_push(d, &d1);
+ }
+ for (cpt = 0; cpt < 1000; cpt++) {
+ d1 = (double) cpt;
+ xbt_dynar_insert_at(d, 2500, &d1);
+ }
+
+ for (cpt = 0; cpt < 2500; cpt++) {
+ d1 = (double) cpt;
+ xbt_dynar_shift(d, &d2);
+ xbt_test_assert2(d1 == d2,
+ "The retrieved value is not the same than the injected one at the begining (%f!=%f)",
+ d1, d2);
+ DEBUG2("Pop %d, length=%lu", cpt, xbt_dynar_length(d));
+ }
+ for (cpt = 999; cpt >= 0; cpt--) {
+ d1 = (double) cpt;
+ xbt_dynar_shift(d, &d2);
+ xbt_test_assert2(d1 == d2,
+ "The retrieved value is not the same than the injected one in the middle (%f!=%f)",
+ d1, d2);
+ }
+ for (cpt = 2500; cpt < 5000; cpt++) {
+ d1 = (double) cpt;
+ xbt_dynar_shift(d, &d2);
+ xbt_test_assert2(d1 == d2,
+ "The retrieved value is not the same than the injected one at the end (%f!=%f)",
+ d1, d2);
+ }
+ xbt_dynar_free(&d); /* This code is used both as example and as regression test, so we try to */
+ xbt_dynar_free(&d); /* free the struct twice here to check that it's ok, but freeing it only once */
+ /* in your code is naturally the way to go outside a regression test */
+
+
+ xbt_test_add0("==== Push 5000 double, remove 2000-4000. free the rest");
+ d = xbt_dynar_new(sizeof(double), NULL);
+ for (cpt = 0; cpt < 5000; cpt++) {
+ d1 = (double) cpt;
+ xbt_dynar_push(d, &d1);
+ }
+ for (cpt = 2000; cpt < 4000; cpt++) {
+ d1 = (double) cpt;
+ xbt_dynar_remove_at(d, 2000, &d2);
+ xbt_test_assert2(d1 == d2,
+ "Remove a bad value. Got %f, expected %f", d2, d1);
+ }
+ xbt_dynar_free(&d); /* This code is used both as example and as regression test, so we try to */
+ xbt_dynar_free(&d); /* free the struct twice here to check that it's ok, but freeing it only once */
+ /* in your code is naturally the way to go outside a regression test */