1 /** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
\r
2 * This file is part of clib library
\r
3 * Copyright (C) 2011 Avinash Dongre ( dongre.avinash@gmail.com )
\r
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
\r
6 * of this software and associated documentation files (the "Software"), to deal
\r
7 * in the Software without restriction, including without limitation the rights
\r
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
\r
9 * copies of the Software, and to permit persons to whom the Software is
\r
10 * furnished to do so, subject to the following conditions:
\r
12 * The above copyright notice and this permission notice shall be included in
\r
13 * all copies or substantial portions of the Software.
\r
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
\r
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
\r
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
\r
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
\r
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
\r
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
\r
22 ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **/
\r
32 compare_e ( void *left, void *right ) {
\r
33 int *l = (int*) left;
\r
34 int *r = (int*) right;
\r
38 free_e ( void *ptr ) {
\r
43 print_e ( void *ptr ){
\r
45 printf ( "%d\n", *(int*)ptr);
\r
52 void* p_rv = (void* )0;
\r
54 struct clib_array* myArray = new_clib_array (8,compare_e,NULL);
\r
55 assert ( clib_true == empty_clib_array( myArray ));
\r
57 for ( i = 0; i <= size; i++) {
\r
58 push_back_clib_array ( myArray, &i ,sizeof(int));
\r
60 assert ( clib_false == empty_clib_array( myArray ));
\r
61 assert ( size + 1 == size_clib_array( myArray ));
\r
62 for ( i = 0; i <= size; i++) {
\r
63 rc = element_at_clib_array ( myArray, i , &p_rv );
\r
68 rc = front_clib_array ( myArray, &p_rv );
\r
73 rc = back_clib_array( myArray, &p_rv );
\r
75 assert ( rv == size );
\r
78 remove_clib_array( myArray, 0 );
\r
79 assert ( size == size_clib_array( myArray ));
\r
80 rc = element_at_clib_array ( myArray, 0 , &p_rv );
\r
85 size = size_clib_array( myArray );
\r
86 remove_clib_array( myArray, size/2 );
\r
87 assert ( size - 1 == size_clib_array( myArray ));
\r
88 rc = element_at_clib_array ( myArray, size/2 , &p_rv );
\r
90 assert ( rv == size/2 + 2 );
\r
93 size = size_clib_array( myArray );
\r
94 remove_clib_array( myArray, size - 1);
\r
95 assert ( size - 1 == size_clib_array( myArray ));
\r
96 size = size_clib_array( myArray );
\r
97 rc = element_at_clib_array ( myArray, size - 1, &p_rv );
\r
103 insert_at_clib_array ( myArray, 5, &i, sizeof(int));
\r
104 rc = element_at_clib_array ( myArray, 5 , &p_rv );
\r
106 assert ( rv == i );
\r
109 rc = element_at_clib_array ( myArray, 6 , &p_rv );
\r
111 assert ( rv == 7 );
\r
114 for ( i = 0; i < size_clib_array(myArray ); i++){
\r
115 rc = element_at_clib_array ( myArray, i , &p_rv );
\r
120 delete_clib_array ( myArray );
\r
124 test_with_pointers() {
\r
128 void* p_rv = (void* )0;
\r
129 struct clib_array* myArray = new_clib_array (8,compare_e,free_e);
\r
130 assert ( clib_true == empty_clib_array( myArray ));
\r
132 for ( i = 0; i < size; i++) {
\r
133 int *v = ( int*) malloc ( sizeof(int));
\r
134 memcpy ( v, &i, sizeof(int));
\r
135 push_back_clib_array ( myArray, v ,sizeof(int*));
\r
138 assert ( clib_false == empty_clib_array( myArray ));
\r
139 assert ( size == size_clib_array( myArray ));
\r
140 for ( i = 0; i < size; i++) {
\r
141 rc = element_at_clib_array ( myArray, i , &p_rv );
\r
143 assert ( *rv == i );
\r
146 rc = front_clib_array ( myArray, &p_rv );
\r
148 assert ( *rv == 0 );
\r
151 rc = back_clib_array( myArray, &p_rv );
\r
153 assert ( *rv == size - 1);
\r
156 remove_clib_array( myArray, 0 );
\r
157 assert ( size - 1 == size_clib_array( myArray ));
\r
159 rc = element_at_clib_array ( myArray, 0 , &p_rv );
\r
161 assert ( *rv == 1 );
\r
164 size = size_clib_array( myArray );
\r
165 remove_clib_array( myArray, size/2 );
\r
166 assert ( size - 1 == size_clib_array( myArray ));
\r
167 rc = element_at_clib_array ( myArray, size/2 , &p_rv );
\r
169 assert ( *rv == size/2 + 2 );
\r
172 size = size_clib_array( myArray );
\r
173 remove_clib_array( myArray, size - 1);
\r
174 assert ( size - 1 == size_clib_array( myArray ));
\r
176 size = size_clib_array( myArray );
\r
178 rc = element_at_clib_array ( myArray, size - 1, &p_rv );
\r
180 assert ( *rv == 8 );
\r
183 delete_clib_array ( myArray );
\r
187 test_with_strings() {
\r
189 char *input_array[11];
\r
192 void* p_rv = (void* )0;
\r
193 struct clib_array* myArray = new_clib_array (8,compare_e,free_e);
\r
194 assert ( clib_true == empty_clib_array( myArray ));
\r
196 input_array[0] = "STRING_0";
\r
197 input_array[1] = "STRING_1";
\r
198 input_array[2] = "STRING_2";
\r
199 input_array[3] = "STRING_3";
\r
200 input_array[4] = "STRING_4";
\r
201 input_array[5] = "STRING_5";
\r
202 input_array[6] = "STRING_6";
\r
203 input_array[7] = "STRING_7";
\r
204 input_array[8] = "STRING_8";
\r
205 input_array[9] = "STRING_9";
\r
206 input_array[10] = "STRING_10";
\r
209 for ( i = 0; i < size; i++) {
\r
210 char *v = clib_strdup ( input_array[i]);
\r
211 push_back_clib_array ( myArray ,v, strlen(v) + 1 );
\r
214 assert ( clib_false == empty_clib_array( myArray ));
\r
215 assert ( size == size_clib_array( myArray ));
\r
216 for ( i = 0; i < size; i++) {
\r
217 rc = element_at_clib_array ( myArray, i , &p_rv );
\r
219 assert ( strcmp( rv, input_array[i]) == 0);
\r
222 rc = front_clib_array ( myArray, &p_rv );
\r
224 assert ( strcmp( rv, input_array[0]) == 0);
\r
227 rc = back_clib_array( myArray, &p_rv );
\r
229 assert ( strcmp( rv, input_array[size - 1]) == 0);
\r
232 remove_clib_array( myArray, 0 );
\r
233 assert ( size - 1 == size_clib_array( myArray ));
\r
235 rc = element_at_clib_array ( myArray, 0 , &p_rv );
\r
237 assert ( strcmp( rv, input_array[1]) == 0);
\r
240 size = size_clib_array( myArray );
\r
241 remove_clib_array( myArray, size/2 );
\r
243 rc = element_at_clib_array ( myArray, size/2 , &p_rv );
\r
245 assert ( strcmp( rv, input_array[size/2 + 2]) == 0);
\r
248 size = size_clib_array( myArray );
\r
249 remove_clib_array( myArray, size - 1);
\r
250 assert ( size - 1 == size_clib_array( myArray ));
\r
251 size = size_clib_array( myArray );
\r
253 rc = element_at_clib_array ( myArray, size - 1, &p_rv );
\r
255 assert ( strcmp( rv, input_array[8]) == 0);
\r
258 delete_clib_array ( myArray );
\r
260 static struct clib_array*
\r
265 void* p_rv = (void* )0;
\r
268 struct clib_array* myArray = new_clib_array (8,compare_e,NULL);
\r
269 assert ( clib_true == empty_clib_array( myArray ));
\r
271 for ( i = 0; i < size; i++) {
\r
272 push_back_clib_array ( myArray, &i ,sizeof(int));
\r
274 assert ( clib_false == empty_clib_array( myArray ));
\r
275 assert ( size == size_clib_array( myArray ));
\r
276 for ( i = 0; i < size; i++) {
\r
277 rc = element_at_clib_array ( myArray, i , &p_rv );
\r
279 assert ( rv == i );
\r
285 test_for_each_array(){
\r
286 struct clib_array* pArray = create_array();
\r
287 struct clib_object *temp;
\r
288 for_each_clib_array( pArray, print_e);
\r
290 temp = pArray->pElements[5];
\r
291 pArray->pElements[5] = pArray->pElements[8];
\r
292 pArray->pElements[8] = temp;
\r
294 for_each_clib_array( pArray, print_e);
\r
295 delete_clib_array ( pArray );
\r
301 test_with_pointers();
\r
302 test_with_strings();
\r
303 printf ( "---------------------------------\n");
\r
304 test_for_each_array();
\r