rename NETWORK_socket API to NETWORK_connection (to make room for the new actual...
[oweals/gnunet.git] / src / util / test_container_vector.c
1 /*
2       This file is part of GNUnet
3       (C) 2005, 2006, 2009 Christian Grothoff (and other contributing authors)
4
5       GNUnet is free software; you can redistribute it and/or modify
6       it under the terms of the GNU General Public License as published
7       by the Free Software Foundation; either version 2, or (at your
8       option) any later version.
9
10       GNUnet is distributed in the hope that it will be useful, but
11       WITHOUT ANY WARRANTY; without even the implied warranty of
12       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13       General Public License for more details.
14
15       You should have received a copy of the GNU General Public License
16       along with GNUnet; see the file COPYING.  If not, write to the
17       Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18       Boston, MA 02111-1307, USA.
19 */
20
21 /**
22  * This is a testcase for the vector, waiting to be extended.
23  */
24
25 #include "platform.h"
26 #include "gnunet_container_lib.h"
27
28 #define DUMP(v) fprintf(stderr, "At %d: \n", __LINE__); GNUNET_CONTAINER_vector_dump(v);
29
30 static int test(int size) {
31   struct GNUNET_CONTAINER_Vector * v;
32
33   v = GNUNET_CONTAINER_vector_create(size);
34   if (0 != GNUNET_CONTAINER_vector_size(v))
35     { DUMP(v); return 1; }
36   if (GNUNET_OK != GNUNET_CONTAINER_vector_insert_at(v, "first", 0))
37     { DUMP(v); return 1; }
38   if (GNUNET_OK == GNUNET_CONTAINER_vector_insert_at(v, "not", 2))
39     { DUMP(v); return 1; }
40   if (GNUNET_OK != GNUNET_CONTAINER_vector_insert_at(v, "zero", 0))
41     { DUMP(v); return 1; }
42   if (GNUNET_OK != GNUNET_CONTAINER_vector_insert_at(v, "second", 2))
43     { DUMP(v); return 1; }
44   GNUNET_CONTAINER_vector_insert_last(v, "third");
45   if (4 != GNUNET_CONTAINER_vector_size(v))
46     { DUMP(v); return 1; }
47   if (0 != strcmp(GNUNET_CONTAINER_vector_get_at(v, 1), "first"))
48     { DUMP(v); return 1; }
49   if (0 != strcmp(GNUNET_CONTAINER_vector_get_at(v, 3), "third"))
50     { DUMP(v); return 1; }
51   if (0 != strcmp(GNUNET_CONTAINER_vector_get_at(v, 0), "zero"))
52     { DUMP(v); return 1; }
53   if (0 != strcmp(GNUNET_CONTAINER_vector_get_first(v), "zero"))
54     { DUMP(v); return 1; }
55   if (0 != strcmp(GNUNET_CONTAINER_vector_get_last(v), "third"))
56     { DUMP(v); return 1; }
57   if (0 != strcmp(GNUNET_CONTAINER_vector_remove_at(v, 1), "first"))
58     { DUMP(v); return 1; }
59   if (0 != strcmp(GNUNET_CONTAINER_vector_get_at(v, 1), "second"))
60     { DUMP(v); return 1; }
61   if (NULL != GNUNET_CONTAINER_vector_remove_at(v, 3))
62     { DUMP(v); return 1; }
63   if (3 != GNUNET_CONTAINER_vector_size(v))
64     { DUMP(v); return 1; }
65   if (0 != strcmp(GNUNET_CONTAINER_vector_remove_at(v, 1), "second"))
66     { DUMP(v); return 1; }
67   if (0 != strcmp(GNUNET_CONTAINER_vector_remove_object(v, "third"), "third"))
68     { DUMP(v); return 1; }
69   if (NULL != GNUNET_CONTAINER_vector_remove_object(v, "third"))
70     { DUMP(v); return 1; }
71   if (0 != strcmp(GNUNET_CONTAINER_vector_remove_last(v), "zero"))
72     { DUMP(v); return 1; }
73   if (0 != GNUNET_CONTAINER_vector_size(v))
74     { DUMP(v); return 1; }
75   if (NULL != GNUNET_CONTAINER_vector_remove_last(v))
76     { DUMP(v); return 1; }
77   if (0 != GNUNET_CONTAINER_vector_size(v))
78     { DUMP(v); return 1; }
79   GNUNET_CONTAINER_vector_destroy(v);
80   return 0;
81 }
82
83 static int test2(int size) {
84   long i;
85   struct GNUNET_CONTAINER_Vector * v;
86
87   v = GNUNET_CONTAINER_vector_create(size);
88
89   for (i=0;i<500;i++)
90     if (GNUNET_OK != GNUNET_CONTAINER_vector_insert_at(v, (void*)i, 0))
91       { DUMP(v); return 1; }
92   if (500 != GNUNET_CONTAINER_vector_size(v))
93     { DUMP(v); return 1; }
94   for (i=0;i<500;i++)
95     if (499 - i != (long) GNUNET_CONTAINER_vector_get_at(v, i))
96       { DUMP(v); return 1; }
97   if (499 != (long) GNUNET_CONTAINER_vector_get_first(v))
98     { DUMP(v); return 1; }
99   for (i=498;i>=0;i--)
100     if (i != (long) GNUNET_CONTAINER_vector_get_next(v))
101       { DUMP(v); return 1; }
102
103   if (499 != (long) GNUNET_CONTAINER_vector_get_first(v))
104     { DUMP(v); return 1; }
105   for (i=498;i>=250;i--)
106     if (i != (long) GNUNET_CONTAINER_vector_get_next(v))
107       { DUMP(v); return 1; }
108   for (i=251;i<499;i++)
109     if (i != (long) GNUNET_CONTAINER_vector_get_previous(v))
110       { DUMP(v); return 1; }
111
112   GNUNET_CONTAINER_vector_destroy(v);
113   return 0;
114 }
115
116
117 int main(int argc,
118          char * argv[]) {
119   if (NULL != GNUNET_CONTAINER_vector_create(0))
120     { printf("At %d\n", __LINE__); return 1; }
121   if (NULL != GNUNET_CONTAINER_vector_create(1))
122     { printf("At %d\n", __LINE__); return 1; }
123   if (test(2) != 0)
124     { printf("At %d\n", __LINE__); return 1; }
125   if (test(3) != 0)
126     { printf("At %d\n", __LINE__); return 1; }
127   if (test(4) != 0)
128     { printf("At %d\n", __LINE__); return 1; }
129   if (test(128) != 0)
130     { printf("At %d\n", __LINE__); return 1; }
131   if (test(65536) != 0)
132     { printf("At %d\n", __LINE__); return 1; }
133   if (test(2*65536) != 0)
134     { printf("At %d\n", __LINE__); return 1; }
135
136   if (test2(2) != 0)
137     { printf("At %d\n", __LINE__); return 1; }
138   if (test2(3) != 0)
139     { printf("At %d\n", __LINE__); return 1; }
140   if (test2(4) != 0)
141     { printf("At %d\n", __LINE__); return 1; }
142   if (test2(128) != 0)
143     { printf("At %d\n", __LINE__); return 1; }
144   return 0;
145 }