]> git.ozlabs.org Git - ccan/blobdiff - junkcode/dongre.avinash@gmail.com-clibutils/test/t_c_array.c
junkcode: upload via website.
[ccan] / junkcode / dongre.avinash@gmail.com-clibutils / test / t_c_array.c
diff --git a/junkcode/dongre.avinash@gmail.com-clibutils/test/t_c_array.c b/junkcode/dongre.avinash@gmail.com-clibutils/test/t_c_array.c
new file mode 100644 (file)
index 0000000..c2f1942
--- /dev/null
@@ -0,0 +1,305 @@
+/** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **\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