eina: fix forgotten initialization of count during eina_list_split_list.
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 17 Feb 2012 11:16:01 +0000 (11:16 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 17 Feb 2012 11:16:01 +0000 (11:16 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/eina@68067 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

ChangeLog
src/lib/eina_list.c
src/tests/eina_test_list.c

index 9372b9c..fc31b21 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
        this is a same kind of visual hint for the purpose of the pointer,
        but again, the two types are interchangeable.
 
+2012-02-17  Cedric Bail
+
+       * Fix forgotten initialization of eina list count during eina_list_split_list.
+
index b83e715..c85855f 100644 (file)
@@ -1172,6 +1172,7 @@ eina_list_split_list(Eina_List *list, Eina_List *relative, Eina_List **right)
    next->prev = NULL;
    next->accounting = _eina_list_mempool_accounting_new(next);
    next->accounting->last = list->accounting->last;
+   next->accounting->count = 0;
    *right = next;
 
    itr = next;
index 6e08847..ce70d03 100644 (file)
@@ -338,10 +338,50 @@ START_TEST(eina_test_sorted_insert)
 }
 END_TEST
 
+START_TEST(eina_test_list_split)
+{
+  Eina_List *left = NULL, *right = NULL ;
+  Eina_List *list = NULL;
+  Eina_List *l;
+  void *list_data;
+  int i;
+
+  eina_init();
+
+  list = eina_list_append(list, "tigh");
+  list = eina_list_append(list, "adar");
+  list = eina_list_append(list, "baltar");
+  list = eina_list_append(list, "roslin");
+  list = eina_list_append(list, "baltar");
+  list = eina_list_append(list, "roslin");
+  list = eina_list_append(list, "baltar");
+  list = eina_list_append(list, "roslin");
+
+  fail_if(list == NULL);
+  fail_if(eina_list_count(list) != 8);
+
+  for ( i = 0; i <  200; i++)
+    {
+      left = eina_list_split_list(list, eina_list_nth_list(list, i % 2), &right);
+
+      if (i % 2 == 0)
+       fail_if(eina_list_count(left) == 1 && eina_list_count(right) + eina_list_count(left) == i + 7);
+      else
+       fail_if(eina_list_count(left) == 2 && eina_list_count(right) + eina_list_count(left) == i + 7);
+
+      list = eina_list_merge(left, right);
+      list = eina_list_append(list, "roslin");
+    }
+
+  eina_shutdown();
+}
+END_TEST
+
 void
 eina_test_list(TCase *tc)
 {
    tcase_add_test(tc, eina_test_simple);
    tcase_add_test(tc, eina_test_merge);
    tcase_add_test(tc, eina_test_sorted_insert);
+   tcase_add_test(tc, eina_test_list_split);
 }