]> granicus.if.org Git - check/commitdiff
Run fixture teardowns in reverse order to setup
authorhugo303 <hugo303@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Mon, 17 May 2004 07:30:56 +0000 (07:30 +0000)
committerhugo303 <hugo303@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Mon, 17 May 2004 07:30:56 +0000 (07:30 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/check/code/trunk@167 64e312b2-a51f-0410-8e61-82d0ca0eb02a

check/src/check.c
check/src/check_list.c
check/src/check_list.h

index a4332a9d458c0479d25b6312dcdb80554fd2080c..625acd2c92f1ba9cf7283da3da916c0c6e4d8404 100644 (file)
@@ -148,11 +148,12 @@ static void tcase_add_fixture (TCase *tc, SFun setup, SFun teardown,
       list_add_end (tc->unch_sflst, fixture_create(setup, ischecked));
   }
 
+  /* Add teardowns at front so they are run in reverse order. */
   if (teardown) {
     if (ischecked)
-      list_add_end (tc->ch_tflst, fixture_create(teardown, ischecked));
+      list_add_front (tc->ch_tflst, fixture_create(teardown, ischecked));
     else
-      list_add_end (tc->unch_tflst, fixture_create(teardown, ischecked));  
+      list_add_front (tc->unch_tflst, fixture_create(teardown, ischecked));  
   }
 }
 
index d255b6a54260ed444c5dd18d154f3d0a2afbdd53..16ad2e746570e7a6ac4999fada8a4edf6d92bf62 100644 (file)
@@ -58,6 +58,19 @@ List *list_create (void)
   return lp;
 }
 
+void list_add_front (List *lp, const void *val)
+{
+  if (lp == NULL)
+    return;
+  maybe_grow(lp);
+  memmove(lp->data + sizeof lp->data[0], lp->data,
+          lp->n_elts * sizeof lp->data[0]);
+  lp->last++;
+  lp->n_elts++;
+  lp->current = 0;
+  lp->data[lp->current] = val;
+}
+
 void list_add_end (List *lp, const void *val)
 {
   if (lp == NULL)
index 1c0024c75d7d2a9235efd4b75e7e2566727de622..306ccfe9664e94ac13b333f718f8e62c186a68d6 100644 (file)
@@ -32,6 +32,10 @@ int list_at_end (List * lp);
 /* Position list at front */
 void list_front(List *lp);
 
+/* Add a value to the front of the list,
+   positioning newly added value as current value.
+   More expensive than list_add_end, as it uses memmove. */
+void list_add_front (List *lp, const void *val);
 
 /* Add a value to the end of the list,
    positioning newly added value as current value */