Enlightenment CVS committal

Author  : cedric
Project : e17
Module  : proto/eina

Dir     : e17/proto/eina/src/tests


Modified Files:
        Makefile.am eina_bench_array.c eina_bench_hash.c 
        eina_bench_stringshare.c eina_suite.c eina_suite.h 
        eina_test_array.c eina_test_hash.c 
Added Files:
        eina_test_accessor.c eina_test_iterator.c 


Log Message:
Add first try for an accessor and iterator API, comment welcome (lack inlist 
and list currently).
Rewrite EINA_ARRAY_ITER_NEXT, still fast, need one more parameter, but no more 
EINA_ARRAY_ITER_END.


===================================================================
RCS file: /cvs/e/e17/proto/eina/src/tests/Makefile.am,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- Makefile.am 8 Aug 2008 15:55:09 -0000       1.8
+++ Makefile.am 11 Aug 2008 16:30:16 -0000      1.9
@@ -22,6 +22,8 @@
 eina_test_counter.c    \
 eina_test_lalloc.c     \
 eina_test_hash.c       \
+eina_test_iterator.c   \
+eina_test_accessor.c   \
 eina_test_list.c
 
 eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la
===================================================================
RCS file: /cvs/e/e17/proto/eina/src/tests/eina_bench_array.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- eina_bench_array.c  8 Aug 2008 14:20:11 -0000       1.2
+++ eina_bench_array.c  11 Aug 2008 16:30:16 -0000      1.3
@@ -54,6 +54,7 @@
 {
    Eina_Array *array;
    Eina_Bench_Object *ebo;
+   Eina_Array_Iterator it;
    unsigned int i;
    unsigned int j;
 
@@ -77,22 +78,86 @@
 
        if (i == 500)
          {
-            EINA_ARRAY_ITER_NEXT(array, j, ebo)
+            EINA_ARRAY_ITER_NEXT(array, j, ebo, it)
               free(ebo);
-            EINA_ARRAY_ITER_END;
 
             eina_array_clean(array);
          }
        else if (i % 30 == 0) eina_array_remove(array, keep, NULL);
 
-       EINA_ARRAY_ITER_NEXT(array, j, ebo)
+       EINA_ARRAY_ITER_NEXT(array, j, ebo, it)
          ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE;
-       EINA_ARRAY_ITER_END;
      }
 
-   EINA_ARRAY_ITER_NEXT(array, j, ebo)
+   EINA_ARRAY_ITER_NEXT(array, j, ebo, it)
      free(ebo);
-   EINA_ARRAY_ITER_END;
+
+   eina_array_free(array);
+
+   eina_array_shutdown();
+}
+
+static Eina_Bool
+eina_iterator_ebo_free(__UNUSED__ const Eina_Array *array,
+                      Eina_Bench_Object *ebo,  __UNUSED__ void *fdata)
+{
+   free(ebo);
+   return EINA_TRUE;
+}
+
+static Eina_Bool
+eina_iterator_ebo_rand(__UNUSED__ const Eina_Array *array,
+                      Eina_Bench_Object *ebo,  __UNUSED__ void *fdata)
+{
+   ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE;
+   return EINA_TRUE;
+}
+
+static void
+eina_bench_array_4evas_render_iterator(int request)
+{
+   Eina_Array *array;
+   Eina_Bench_Object *ebo;
+   Eina_Iterator *it;
+   unsigned int i;
+   unsigned int j;
+
+   srand(time(NULL));
+
+   eina_array_init();
+
+   array = eina_array_new(64);
+
+   for (i = 0; i < 1000; ++i)
+     {
+       for (j = 0; j < (unsigned int) request; ++j)
+         {
+            ebo = malloc(sizeof (Eina_Bench_Object));
+            if (!ebo) continue ;
+
+            ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE;
+
+            eina_array_append(array, ebo);
+         }
+
+       if (i == 500)
+         {
+            it = eina_array_iterator_new(array);
+            eina_iterator_foreach(it, EINA_EACH(eina_iterator_ebo_free), NULL);
+            eina_iterator_free(it);
+
+            eina_array_clean(array);
+         }
+       else if (i % 30 == 0) eina_array_remove(array, keep, NULL);
+
+       it = eina_array_iterator_new(array);
+       eina_iterator_foreach(it, EINA_EACH(eina_iterator_ebo_rand), NULL);
+       eina_iterator_free(it);
+     }
+
+   it = eina_array_iterator_new(array);
+   eina_iterator_foreach(it, EINA_EACH(eina_iterator_ebo_free), NULL);
+   eina_iterator_free(it);
 
    eina_array_free(array);
 
@@ -232,6 +297,7 @@
 void eina_bench_array(Eina_Bench *bench)
 {
    eina_bench_register(bench, "array-inline", 
EINA_BENCH(eina_bench_array_4evas_render_inline), 200, 4000, 100);
+   eina_bench_register(bench, "array-iterator", 
EINA_BENCH(eina_bench_array_4evas_render_iterator), 200, 4000, 100);
    eina_bench_register(bench, "list", 
EINA_BENCH(eina_bench_list_4evas_render), 200, 4000, 100);
    eina_bench_register(bench, "inlist", 
EINA_BENCH(eina_bench_inlist_4evas_render), 200, 4000, 100);
 }
===================================================================
RCS file: /cvs/e/e17/proto/eina/src/tests/eina_bench_hash.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- eina_bench_hash.c   8 Aug 2008 14:20:11 -0000       1.5
+++ eina_bench_hash.c   11 Aug 2008 16:30:16 -0000      1.6
@@ -31,6 +31,7 @@
    Eina_Hash *hash = NULL;
    Eina_Array *array = NULL;
    int *tmp_val;
+   Eina_Array_Iterator it;
    unsigned int i;
 
    array = eina_array_new(1000);
@@ -66,9 +67,8 @@
 
    eina_hash_free(hash);
 
-   EINA_ARRAY_ITER_NEXT(array, i, tmp_val)
+   EINA_ARRAY_ITER_NEXT(array, i, tmp_val, it)
      free(tmp_val);
-   EINA_ARRAY_ITER_END;
 
    eina_array_free(array);
 }
@@ -79,6 +79,7 @@
    Eina_Hash *hash = NULL;
    Eina_Array *array = NULL;
    int *tmp_val;
+   Eina_Array_Iterator it;
    unsigned int i;
 
    array = eina_array_new(1000);
@@ -114,9 +115,8 @@
 
    eina_hash_free(hash);
 
-   EINA_ARRAY_ITER_NEXT(array, i, tmp_val)
+   EINA_ARRAY_ITER_NEXT(array, i, tmp_val, it)
      free(tmp_val);
-   EINA_ARRAY_ITER_END;
 
    eina_array_free(array);
 }
@@ -127,6 +127,7 @@
    Eina_Hash *hash = NULL;
    Eina_Array *array = NULL;
    int *tmp_val;
+   Eina_Array_Iterator it;
    unsigned int i;
 
    array = eina_array_new(1000);
@@ -164,9 +165,8 @@
 
    eina_hash_free(hash);
 
-   EINA_ARRAY_ITER_NEXT(array, i, tmp_val)
+   EINA_ARRAY_ITER_NEXT(array, i, tmp_val, it)
      free(tmp_val);
-   EINA_ARRAY_ITER_END;
 
    eina_array_free(array);
 }
===================================================================
RCS file: /cvs/e/e17/proto/eina/src/tests/eina_bench_stringshare.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- eina_bench_stringshare.c    8 Aug 2008 15:55:09 -0000       1.1
+++ eina_bench_stringshare.c    11 Aug 2008 16:30:16 -0000      1.2
@@ -29,6 +29,7 @@
 {
    const char *tmp;
    Eina_Array *ea;
+   Eina_Array_Iterator it;
    unsigned int j;
    int i;
 
@@ -60,9 +61,8 @@
          eina_array_append(ea, tmp);
        }
 
-   EINA_ARRAY_ITER_NEXT(ea, j, tmp)
+   EINA_ARRAY_ITER_NEXT(ea, j, tmp, it)
      eina_stringshare_del(tmp);
-   EINA_ARRAY_ITER_END;
 
    eina_array_shutdown();
    eina_stringshare_shutdown();
===================================================================
RCS file: /cvs/e/e17/proto/eina/src/tests/eina_suite.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- eina_suite.c        7 Aug 2008 13:09:08 -0000       1.7
+++ eina_suite.c        11 Aug 2008 16:30:16 -0000      1.8
@@ -36,6 +36,8 @@
   { "Counter", eina_test_counter },
   { "Hash", eina_test_hash },
   { "List", eina_test_list },
+  { "Iterator", eina_test_iterator },
+  { "Accessor", eina_test_accessor },
   { NULL, NULL }
 };
 
===================================================================
RCS file: /cvs/e/e17/proto/eina/src/tests/eina_suite.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- eina_suite.h        7 Aug 2008 13:09:08 -0000       1.7
+++ eina_suite.h        11 Aug 2008 16:30:16 -0000      1.8
@@ -35,5 +35,7 @@
 void eina_test_counter(TCase *tc);
 void eina_test_hash(TCase *tc);
 void eina_test_list(TCase *tc);
+void eina_test_iterator(TCase *tc);
+void eina_test_accessor(TCase *tc);
 
 #endif /* EINA_SUITE_H_ */
===================================================================
RCS file: /cvs/e/e17/proto/eina/src/tests/eina_test_array.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- eina_test_array.c   8 Aug 2008 14:20:11 -0000       1.4
+++ eina_test_array.c   11 Aug 2008 16:30:16 -0000      1.5
@@ -25,6 +25,7 @@
 {
    Eina_Array *ea;
    char *tmp;
+   Eina_Array_Iterator it;
    unsigned int i;
 
    eina_array_init();
@@ -44,10 +45,11 @@
    fail_if(eina_array_get(ea, 10) == NULL);
    fail_if(atoi(eina_array_get(ea, 10)) != 10);
 
-   EINA_ARRAY_ITER_NEXT(ea, i, tmp)
-     fail_if((unsigned int) atoi(tmp) != i);
-     free(tmp);
-   EINA_ARRAY_ITER_END
+   EINA_ARRAY_ITER_NEXT(ea, i, tmp, it)
+     {
+       fail_if((unsigned int) atoi(tmp) != i);
+       free(tmp);
+     }
 
    fail_if(i != 200);
 
@@ -63,6 +65,7 @@
 {
    Eina_Array sea = { NULL, 0, 0, 0 };
    char *tmp;
+   Eina_Array_Iterator it;
    unsigned int i;
 
    eina_array_init();
@@ -81,10 +84,11 @@
    fail_if(eina_array_get(&sea, 10) == NULL);
    fail_if(atoi(eina_array_get(&sea, 10)) != 10);
 
-   EINA_ARRAY_ITER_NEXT(&sea, i, tmp)
-     fail_if((unsigned int) atoi(tmp) != i);
-     free(tmp);
-   EINA_ARRAY_ITER_END
+   EINA_ARRAY_ITER_NEXT(&sea, i, tmp, it)
+     {
+       fail_if((unsigned int) atoi(tmp) != i);
+       free(tmp);
+     }
 
    fail_if(i != 200);
 
@@ -111,6 +115,7 @@
 {
    Eina_Array *ea;
    int *tmp;
+   Eina_Array_Iterator it;
    unsigned int i;
 
    eina_array_init();
@@ -137,9 +142,8 @@
    eina_array_remove(ea, keep_int, NULL);
 
    fail_if(eina_array_count(ea) != 990);
-   EINA_ARRAY_ITER_NEXT(ea, i, tmp)
+   EINA_ARRAY_ITER_NEXT(ea, i, tmp, it)
      fail_if(*tmp == 0);
-   EINA_ARRAY_ITER_END;
 
    // Remove the last items
    for (i = 980; i < 990; ++i)
@@ -152,12 +156,11 @@
 
    // Remove all items
    fail_if(eina_array_count(ea) != 980);
-   EINA_ARRAY_ITER_NEXT(ea, i, tmp)
+   EINA_ARRAY_ITER_NEXT(ea, i, tmp, it)
      {
        fail_if(*tmp == 0);
        *tmp = 0;
      }
-   EINA_ARRAY_ITER_END;
 
    eina_array_remove(ea, keep_int, NULL);
 
===================================================================
RCS file: /cvs/e/e17/proto/eina/src/tests/eina_test_hash.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- eina_test_hash.c    8 Aug 2008 15:54:26 -0000       1.3
+++ eina_test_hash.c    11 Aug 2008 16:30:16 -0000      1.4
@@ -16,6 +16,10 @@
  * if not, see <http://www.gnu.org/licenses/>.
  */
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 
@@ -35,6 +39,20 @@
 }
 END_TEST
 
+static Eina_Bool
+eina_foreach_check(__UNUSED__ const Eina_Hash *hash, const void *key, void 
*data, __UNUSED__ void *fdata)
+{
+   int *j = data;
+   int i;
+
+   if (strlen(key) <= 0) return EINA_TRUE;
+
+   i = atoi(key);
+   fail_if(i != *j);
+
+   return EINA_TRUE;
+}
+
 START_TEST(eina_hash_simple)
 {
    Eina_Hash *hash = NULL;
@@ -59,6 +77,8 @@
    test = eina_hash_find(hash, "42");
    fail_if(!test);
    fail_if(*test != 42);
+
+   eina_hash_foreach(hash, eina_foreach_check, NULL);
 
    test = eina_hash_modify(hash, "5", &array[4]);
    fail_if(!test);



-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to