1 /* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
26 #ifdef EINA_BENCH_HAVE_GLIB
30 #include "Evas_Data.h"
31 #include "Ecore_Data.h"
33 #include "eina_bench.h"
34 #include "eina_convert.h"
35 #include "eina_list.h"
36 #include "eina_main.h"
39 _eina_cmp_str(const char *a, const char *b)
45 eina_bench_sort_eina(int request)
47 Eina_List *list = NULL;
54 for (i = 0; i < request; ++i)
58 eina_convert_itoa(rand() % request, buffer);
60 list = eina_list_prepend(list, strdup(buffer));
63 list = eina_list_sort(list, -1, EINA_COMPARE_CB(_eina_cmp_str));
67 free(eina_list_data_get(list));
68 list = eina_list_remove_list(list, list);
75 eina_bench_sort_evas(int request)
77 Evas_List *list = NULL;
82 for (i = 0; i < request; ++i)
86 eina_convert_itoa(rand() % request, buffer);
88 list = evas_list_prepend(list, strdup(buffer));
91 list = evas_list_sort(list, -1, (void *)_eina_cmp_str);
95 free(evas_list_data(list));
96 list = evas_list_remove_list(list, list);
100 #ifdef EINA_BENCH_HAVE_GLIB
102 eina_bench_sort_glist(int request)
109 for (i = 0; i < request; ++i)
113 eina_convert_itoa(rand() % request, buffer);
115 list = g_list_prepend(list, strdup(buffer));
118 list = g_list_sort(list, (void *)_eina_cmp_str);
123 list = g_list_delete_link(list, list);
129 eina_bench_sort_ecore_default(int request)
131 Ecore_List *list = NULL;
134 list = ecore_list_new();
135 ecore_list_free_cb_set(list, free);
137 for (i = 0; i < request; ++i)
141 eina_convert_itoa(rand() % request, buffer);
143 ecore_list_prepend(list, strdup(buffer));
146 ecore_list_sort(list, ECORE_COMPARE_CB(_eina_cmp_str), 0);
148 ecore_list_destroy(list);
152 eina_bench_sort_ecore_merge(int request)
154 Ecore_List *list = NULL;
157 list = ecore_list_new();
158 ecore_list_free_cb_set(list, free);
160 for (i = 0; i < request; ++i)
164 eina_convert_itoa(rand() % request, buffer);
166 ecore_list_prepend(list, strdup(buffer));
169 ecore_list_mergesort(list, ECORE_COMPARE_CB(_eina_cmp_str), 0);
171 ecore_list_destroy(list);
175 eina_bench_sort_ecore_heap(int request)
177 Ecore_List *list = NULL;
180 list = ecore_list_new();
181 ecore_list_free_cb_set(list, free);
183 for (i = 0; i < request; ++i)
187 eina_convert_itoa(rand() % request, buffer);
189 ecore_list_prepend(list, strdup(buffer));
192 ecore_list_heapsort(list, ECORE_COMPARE_CB(_eina_cmp_str), 0);
194 ecore_list_destroy(list);
197 void eina_bench_sort(Eina_Benchmark *bench)
199 eina_benchmark_register(bench, "eina",
201 eina_bench_sort_eina), 10, 10000, 100);
202 #ifdef EINA_BENCH_HAVE_GLIB
203 eina_benchmark_register(bench, "glist",
205 eina_bench_sort_glist), 10, 10000, 100);
207 eina_benchmark_register(bench, "ecore",
209 eina_bench_sort_ecore_default), 10, 10000, 100);
210 eina_benchmark_register(bench, "ecore-merge",
212 eina_bench_sort_ecore_merge), 10, 10000, 100);
213 eina_benchmark_register(bench, "ecore-heap",
215 eina_bench_sort_ecore_heap), 10, 10000, 100);
216 eina_benchmark_register(bench, "evas",
218 eina_bench_sort_evas), 10, 10000, 100);