EFL 1.7 svn doobies
[profile/ivi/eina.git] / src / tests / eina_test_lalloc.c
1 /* EINA - EFL data type library
2  * Copyright (C) 2008 Cedric Bail
3  *
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.
8  *
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.
13  *
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/>.
17  */
18
19 #ifdef HAVE_CONFIG_H
20 # include "config.h"
21 #endif
22
23 #include <stdlib.h>
24 #include <stdio.h>
25
26 #include "eina_suite.h"
27 #include "Eina.h"
28
29 typedef struct _Eina_Lazy_Allocator_Test Eina_Lazy_Allocator_Test;
30 struct _Eina_Lazy_Allocator_Test
31 {
32    void *data;
33    int num;
34 };
35
36 static Eina_Bool
37 _test_alloc(Eina_Lazy_Allocator_Test *elat, int num)
38 {
39    if (elat->num == 10 && num == 1)
40       return EINA_FALSE;
41
42    if (elat->num == 122 && num == 128)
43       return EINA_FALSE;
44
45    elat->num += num;
46    elat->data = realloc(elat->data, elat->num);
47
48    return EINA_TRUE;
49 }
50
51 static void
52 _test_free(Eina_Lazy_Allocator_Test *elat)
53 {
54    free(elat->data);
55    elat->data = NULL;
56    elat->num = 0;
57 }
58
59 START_TEST(eina_lalloc_simple)
60 {
61    Eina_Lazy_Allocator_Test *elat;
62    Eina_Lalloc *test;
63    int i;
64
65    elat = calloc(1, sizeof (Eina_Lazy_Allocator_Test));
66       fail_if(!elat);
67
68    test = eina_lalloc_new(elat, EINA_LALLOC_ALLOC(
69                              _test_alloc), EINA_LALLOC_FREE(_test_free), 10);
70       fail_if(!test);
71
72    for (i = 0; i < 10; ++i)
73       fail_if(eina_lalloc_element_add(test) != EINA_TRUE);
74       fail_if(eina_lalloc_element_add(test) != EINA_FALSE);
75       fail_if(eina_lalloc_elements_add(test, 5) != EINA_TRUE);
76    for (i = 0; i < 21; ++i)
77       fail_if(eina_lalloc_element_add(test) != EINA_TRUE);
78
79       fail_if(eina_lalloc_elements_add(test, 50) != EINA_FALSE);
80
81       eina_lalloc_free(test);
82 }
83 END_TEST
84
85 void
86 eina_test_lalloc(TCase *tc)
87 {
88    tcase_add_test(tc, eina_lalloc_simple);
89 }