Suporta CNPJ em bem.
[cascardo/declara.git] / test / listtest.c
1 /*
2  *  Copyright (C) 2012-2015  Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
3  *
4  *  This program is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License as published by
6  *  the Free Software Foundation; either version 3 of the License, or
7  *  (at your option) any later version.
8  *
9  *  This program 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
12  *  GNU General Public License for more details.
13  *
14  *  You should have received a copy of the GNU General Public License along
15  *  with this program; if not, write to the Free Software Foundation, Inc.,
16  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  */
18
19 #include <list.h>
20 #include <stdio.h>
21 #include <string.h>
22 #include <stdlib.h>
23
24 static char *names[] = {
25         "backwards",
26         "end to start",
27         "finish",
28         "english",
29 };
30
31 static char *sorting[] = {
32         "1",
33         "5",
34         "0",
35         "3",
36         "9",
37 };
38
39 static char *sorted[] = {
40         "0",
41         "1",
42         "3",
43         "5",
44         "9",
45 };
46
47 #define ALEN(x) (sizeof(x)/sizeof(x[0]))
48
49 int main(int argc, char **argv)
50 {
51         struct list *l;
52         int i;
53         int arraylen;
54
55         arraylen = sizeof(names)/sizeof(names[0]);
56
57         l = list_new();
58         list_add(&l, "GNU");
59         list_free(l, NULL);
60         printf("Single static list test pass\n");
61         fflush(stdout);
62
63         l = list_new();
64         for (i = 0; i < arraylen; i++) {
65                 list_add(&l, strdup(names[i]));
66         }
67         for (i = 0; i < arraylen; i++) {
68                 if (strcmp(list_get(l, i), names[i]))
69                         return 1;
70         }
71         list_free(l, free);
72         printf("Multiple add ordering list test pass\n");
73         fflush(stdout);
74
75         l = list_new();
76         for (i = 0; i < arraylen; i++) {
77                 list_insert(&l, 0, strdup(names[i]));
78         }
79         for (i = 0; i < arraylen; i++) {
80                 if (strcmp(list_get(l, i), names[arraylen - i - 1]))
81                         return 1;
82         }
83         list_free(l, free);
84         printf("Multiple insertion at start ordering list test pass\n");
85         fflush(stdout);
86
87         l = list_new();
88         for (i = 0; i < arraylen; i++) {
89                 list_insert(&l, i, strdup(names[i]));
90         }
91         for (i = 0; i < arraylen; i++) {
92                 if (strcmp(list_get(l, i), names[i]))
93                         return 1;
94         }
95         list_free(l, free);
96         printf("Multiple insertion at end ordering list test pass\n");
97         fflush(stdout);
98
99         l = list_new();
100         for (i = 0; i < ALEN(sorting); i++) {
101                 list_insert_ordered(&l, strdup(sorting[i]),
102                                     (sort_function_t *) strcmp);
103         }
104         for (i = 0; i < ALEN(sorted); i++) {
105                 if (strcmp(list_get(l, i), sorted[i]))
106                         return 1;
107         }
108         list_free(l, free);
109         printf("Ordered insertion list test pass\n");
110         fflush(stdout);
111
112         return 0;
113 }