--- /dev/null
+/** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **\r
+ * This file is part of clib library\r
+ * Copyright (C) 2011 Avinash Dongre ( dongre.avinash@gmail.com )\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a copy\r
+ * of this software and associated documentation files (the "Software"), to deal\r
+ * in the Software without restriction, including without limitation the rights\r
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+ * copies of the Software, and to permit persons to whom the Software is\r
+ * furnished to do so, subject to the following conditions:\r
+ * \r
+ * The above copyright notice and this permission notice shall be included in\r
+ * all copies or substantial portions of the Software.\r
+ * \r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+ * THE SOFTWARE.\r
+ ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **/\r
+\r
+#include "c_lib.h"\r
+\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <stdio.h>\r
+#include <assert.h>\r
+\r
+static int \r
+compare_e ( void *left, void *right ) {\r
+ int *l = (int*) left;\r
+ int *r = (int*) right;\r
+ return *l == *r ;\r
+}\r
+static void \r
+free_e ( void *ptr ) {\r
+ if ( ptr )\r
+ free ( ptr);\r
+}\r
+static void\r
+print_e ( void *ptr ){\r
+ if ( ptr ) \r
+ printf ( "%d\n", *(int*)ptr);\r
+}\r
+static void \r
+test_with_int() {\r
+ int size = 10;\r
+ int i = 0;\r
+ int rc ;\r
+ void* p_rv = (void* )0;\r
+ int rv = 0;\r
+ struct clib_array* myArray = new_clib_array (8,compare_e,NULL);\r
+ assert ( clib_true == empty_clib_array( myArray ));\r
+\r
+ for ( i = 0; i <= size; i++) {\r
+ push_back_clib_array ( myArray, &i ,sizeof(int));\r
+ }\r
+ assert ( clib_false == empty_clib_array( myArray ));\r
+ assert ( size + 1 == size_clib_array( myArray ));\r
+ for ( i = 0; i <= size; i++) { \r
+ rc = element_at_clib_array ( myArray, i , &p_rv );\r
+ rv = *(int*)p_rv;\r
+ assert ( rv == i );\r
+ free ( p_rv );\r
+ } \r
+ rc = front_clib_array ( myArray, &p_rv );\r
+ rv = *(int*)p_rv;\r
+ assert ( rv == 0 );\r
+ free ( p_rv );\r
+\r
+ rc = back_clib_array( myArray, &p_rv );\r
+ rv = *(int*)p_rv;\r
+ assert ( rv == size );\r
+ free ( p_rv );\r
+\r
+ remove_clib_array( myArray, 0 );\r
+ assert ( size == size_clib_array( myArray ));\r
+ rc = element_at_clib_array ( myArray, 0 , &p_rv );\r
+ rv = *(int*)p_rv;\r
+ assert ( rv == 1 );\r
+ free ( p_rv );\r
+\r
+ size = size_clib_array( myArray );\r
+ remove_clib_array( myArray, size/2 );\r
+ assert ( size - 1 == size_clib_array( myArray ));\r
+ rc = element_at_clib_array ( myArray, size/2 , &p_rv );\r
+ rv = *(int*)p_rv;\r
+ assert ( rv == size/2 + 2 );\r
+ free ( p_rv );\r
+\r
+ size = size_clib_array( myArray );\r
+ remove_clib_array( myArray, size - 1);\r
+ assert ( size - 1 == size_clib_array( myArray ));\r
+ size = size_clib_array( myArray );\r
+ rc = element_at_clib_array ( myArray, size - 1, &p_rv );\r
+ rv = *(int*)p_rv;\r
+ assert ( rv == 9 );\r
+ free ( p_rv );\r
+\r
+ i = 900;\r
+ insert_at_clib_array ( myArray, 5, &i, sizeof(int));\r
+ rc = element_at_clib_array ( myArray, 5 , &p_rv );\r
+ rv = *(int*)p_rv;\r
+ assert ( rv == i );\r
+ free ( p_rv );\r
+\r
+ rc = element_at_clib_array ( myArray, 6 , &p_rv );\r
+ rv = *(int*)p_rv;\r
+ assert ( rv == 7 );\r
+ free ( p_rv ); \r
+\r
+ for ( i = 0; i < size_clib_array(myArray ); i++){\r
+ rc = element_at_clib_array ( myArray, i , &p_rv );\r
+ print_e ( p_rv);\r
+ free ( p_rv );\r
+ \r
+ } \r
+ delete_clib_array ( myArray );\r
+}\r
+\r
+static void \r
+test_with_pointers() {\r
+ int size = 10;\r
+ int i = 0;\r
+ int *rv, rc ;\r
+ void* p_rv = (void* )0;\r
+ struct clib_array* myArray = new_clib_array (8,compare_e,free_e);\r
+ assert ( clib_true == empty_clib_array( myArray ));\r
+\r
+ for ( i = 0; i < size; i++) {\r
+ int *v = ( int*) malloc ( sizeof(int));\r
+ memcpy ( v, &i, sizeof(int));\r
+ push_back_clib_array ( myArray, v ,sizeof(int*));\r
+ free ( v );\r
+ }\r
+ assert ( clib_false == empty_clib_array( myArray ));\r
+ assert ( size == size_clib_array( myArray ));\r
+ for ( i = 0; i < size; i++) { \r
+ rc = element_at_clib_array ( myArray, i , &p_rv );\r
+ rv = (int*) p_rv;\r
+ assert ( *rv == i );\r
+ free ( p_rv);\r
+ } \r
+ rc = front_clib_array ( myArray, &p_rv );\r
+ rv = (int*) p_rv;\r
+ assert ( *rv == 0 );\r
+ free ( p_rv);\r
+\r
+ rc = back_clib_array( myArray, &p_rv );\r
+ rv = (int*) p_rv;\r
+ assert ( *rv == size - 1);\r
+ free ( p_rv);\r
+\r
+ remove_clib_array( myArray, 0 );\r
+ assert ( size - 1 == size_clib_array( myArray ));\r
+\r
+ rc = element_at_clib_array ( myArray, 0 , &p_rv );\r
+ rv = (int*) p_rv;\r
+ assert ( *rv == 1 );\r
+ free ( p_rv);\r
+\r
+ size = size_clib_array( myArray );\r
+ remove_clib_array( myArray, size/2 );\r
+ assert ( size - 1 == size_clib_array( myArray ));\r
+ rc = element_at_clib_array ( myArray, size/2 , &p_rv );\r
+ rv = (int*) p_rv;\r
+ assert ( *rv == size/2 + 2 );\r
+ free ( p_rv);\r
+\r
+ size = size_clib_array( myArray );\r
+ remove_clib_array( myArray, size - 1);\r
+ assert ( size - 1 == size_clib_array( myArray ));\r
+\r
+ size = size_clib_array( myArray );\r
+\r
+ rc = element_at_clib_array ( myArray, size - 1, &p_rv );\r
+ rv = (int*) p_rv;\r
+ assert ( *rv == 8 );\r
+ free ( p_rv);\r
+ \r
+ delete_clib_array ( myArray );\r
+}\r
+\r
+static void \r
+test_with_strings() {\r
+ int size = 10;\r
+ char *input_array[11];\r
+ int i = 0;\r
+ char *rv, rc ;\r
+ void* p_rv = (void* )0;\r
+ struct clib_array* myArray = new_clib_array (8,compare_e,free_e);\r
+ assert ( clib_true == empty_clib_array( myArray ));\r
+\r
+ input_array[0] = "STRING_0";\r
+ input_array[1] = "STRING_1";\r
+ input_array[2] = "STRING_2";\r
+ input_array[3] = "STRING_3";\r
+ input_array[4] = "STRING_4";\r
+ input_array[5] = "STRING_5";\r
+ input_array[6] = "STRING_6";\r
+ input_array[7] = "STRING_7";\r
+ input_array[8] = "STRING_8";\r
+ input_array[9] = "STRING_9";\r
+ input_array[10] = "STRING_10";\r
+\r
+\r
+ for ( i = 0; i < size; i++) {\r
+ char *v = clib_strdup ( input_array[i]);\r
+ push_back_clib_array ( myArray ,v, strlen(v) + 1 );\r
+ free ( v );\r
+ }\r
+ assert ( clib_false == empty_clib_array( myArray ));\r
+ assert ( size == size_clib_array( myArray ));\r
+ for ( i = 0; i < size; i++) { \r
+ rc = element_at_clib_array ( myArray, i , &p_rv );\r
+ rv = (char*)p_rv;\r
+ assert ( strcmp( rv, input_array[i]) == 0);\r
+ free ( p_rv );\r
+ } \r
+ rc = front_clib_array ( myArray, &p_rv );\r
+ rv = (char*)p_rv;\r
+ assert ( strcmp( rv, input_array[0]) == 0);\r
+ free ( p_rv );\r
+\r
+ rc = back_clib_array( myArray, &p_rv );\r
+ rv = (char*)p_rv;\r
+ assert ( strcmp( rv, input_array[size - 1]) == 0);\r
+ free ( p_rv );\r
+\r
+ remove_clib_array( myArray, 0 );\r
+ assert ( size - 1 == size_clib_array( myArray ));\r
+\r
+ rc = element_at_clib_array ( myArray, 0 , &p_rv );\r
+ rv = (char*)p_rv;\r
+ assert ( strcmp( rv, input_array[1]) == 0);\r
+ free ( p_rv );\r
+\r
+ size = size_clib_array( myArray );\r
+ remove_clib_array( myArray, size/2 );\r
+\r
+ rc = element_at_clib_array ( myArray, size/2 , &p_rv );\r
+ rv = (char*)p_rv;\r
+ assert ( strcmp( rv, input_array[size/2 + 2]) == 0);\r
+ free ( p_rv );\r
+\r
+ size = size_clib_array( myArray );\r
+ remove_clib_array( myArray, size - 1);\r
+ assert ( size - 1 == size_clib_array( myArray ));\r
+ size = size_clib_array( myArray );\r
+\r
+ rc = element_at_clib_array ( myArray, size - 1, &p_rv );\r
+ rv = (char*)p_rv; \r
+ assert ( strcmp( rv, input_array[8]) == 0);\r
+ free ( p_rv );\r
+\r
+ delete_clib_array ( myArray );\r
+}\r
+static struct clib_array*\r
+create_array() {\r
+ int size = 10;\r
+ int i = 0;\r
+ int rc ;\r
+ void* p_rv = (void* )0;\r
+ int rv = 0;\r
+\r
+ struct clib_array* myArray = new_clib_array (8,compare_e,NULL);\r
+ assert ( clib_true == empty_clib_array( myArray ));\r
+\r
+ for ( i = 0; i < size; i++) {\r
+ push_back_clib_array ( myArray, &i ,sizeof(int));\r
+ }\r
+ assert ( clib_false == empty_clib_array( myArray ));\r
+ assert ( size == size_clib_array( myArray ));\r
+ for ( i = 0; i < size; i++) { \r
+ rc = element_at_clib_array ( myArray, i , &p_rv );\r
+ rv = *(int*)p_rv;\r
+ assert ( rv == i );\r
+ free ( p_rv );\r
+ } \r
+ return myArray;\r
+}\r
+static void\r
+test_for_each_array(){\r
+ struct clib_array* pArray = create_array();\r
+ struct clib_object *temp;\r
+ for_each_clib_array( pArray, print_e);\r
+\r
+ temp = pArray->pElements[5];\r
+ pArray->pElements[5] = pArray->pElements[8];\r
+ pArray->pElements[8] = temp;\r
+\r
+ for_each_clib_array( pArray, print_e);\r
+ delete_clib_array ( pArray );\r
+\r
+}\r
+void \r
+test_clib_array(){\r
+ test_with_int();\r
+ test_with_pointers();\r
+ test_with_strings();\r
+ printf ( "---------------------------------\n");\r
+ test_for_each_array();\r
+}\r