1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/test/test_list.c Sun Feb 14 15:37:12 2021 +0100 1.3 @@ -0,0 +1,106 @@ 1.4 +/* 1.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 1.6 + * 1.7 + * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved. 1.8 + * 1.9 + * Redistribution and use in source and binary forms, with or without 1.10 + * modification, are permitted provided that the following conditions are met: 1.11 + * 1.12 + * 1. Redistributions of source code must retain the above copyright 1.13 + * notice, this list of conditions and the following disclaimer. 1.14 + * 1.15 + * 2. Redistributions in binary form must reproduce the above copyright 1.16 + * notice, this list of conditions and the following disclaimer in the 1.17 + * documentation and/or other materials provided with the distribution. 1.18 + * 1.19 + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1.20 + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1.21 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1.22 + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 1.23 + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1.24 + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1.25 + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 1.26 + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 1.27 + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 1.28 + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 1.29 + * POSSIBILITY OF SUCH DAMAGE. 1.30 + */ 1.31 + 1.32 +#include "cx/linked_list.h" 1.33 +#include "test_config.h" 1.34 + 1.35 +int cmp_int(int const *l, int const *r) { 1.36 + int left = *l, right = *r; 1.37 + return left == right ? 0 : (left < right ? -1 : 1); 1.38 +} 1.39 + 1.40 +void test_linked_list_create() { 1.41 + CxList list = cxLinkedListCreate(cxDefaultAllocator, (CxListComparator) cmp_int, sizeof(int)); 1.42 + 1.43 + CU_ASSERT_EQUAL(list->data.size, 0) 1.44 + CU_ASSERT_EQUAL(list->data.capacity, (size_t) -1) 1.45 + CU_ASSERT_PTR_EQUAL(list->data.allocator, cxDefaultAllocator) 1.46 + CU_ASSERT_EQUAL(list->data.itemsize, sizeof(int)) 1.47 + CU_ASSERT_PTR_EQUAL(list->data.cmpfunc, cmp_int) 1.48 + 1.49 + struct node { 1.50 + void* begin; void* end; ptrdiff_t ploc; ptrdiff_t nloc; 1.51 + }; 1.52 + 1.53 + struct node* actual = (struct node*) list->data.listdata; 1.54 + CU_ASSERT_PTR_NULL(actual->begin) 1.55 + CU_ASSERT_PTR_NULL(actual->end) 1.56 + CU_ASSERT_EQUAL(0, actual->ploc) 1.57 + CU_ASSERT_EQUAL(sizeof(void*), actual->nloc) 1.58 + 1.59 + cxLinkedListDestroy(list); 1.60 + 1.61 + // TODO: use allocator that keeps track of the freed memory 1.62 +} 1.63 + 1.64 +int main() { 1.65 + CU_pSuite suite = NULL; 1.66 + 1.67 + if (CUE_SUCCESS != CU_initialize_registry()) { 1.68 + return CU_get_error(); 1.69 + } 1.70 + 1.71 + suite = CU_add_suite("linked list suite", NULL, NULL); 1.72 + if (NULL == suite) { 1.73 + CU_cleanup_registry(); 1.74 + return CU_get_error(); 1.75 + } 1.76 + 1.77 + if ( 1.78 + !CU_add_test(suite, "create and destroy linked list", test_linked_list_create) 1.79 + ) { 1.80 + CU_cleanup_registry(); 1.81 + return CU_get_error(); 1.82 + } 1.83 + 1.84 + suite = CU_add_suite("array suite", NULL, NULL); 1.85 + if (NULL == suite) { 1.86 + CU_cleanup_registry(); 1.87 + return CU_get_error(); 1.88 + } 1.89 + 1.90 + /* 1.91 + if ( 1.92 + !CU_add_test(suite, "array...", test_array...) 1.93 + ) { 1.94 + CU_cleanup_registry(); 1.95 + return CU_get_error(); 1.96 + } 1.97 + */ 1.98 + 1.99 + CU_basic_set_mode(UCX_CU_BRM); 1.100 + 1.101 + int exitcode; 1.102 + if (CU_basic_run_tests()) { 1.103 + exitcode = CU_get_error(); 1.104 + } else { 1.105 + exitcode = CU_get_number_of_failures() == 0 ? 0 : 1; 1.106 + } 1.107 + CU_cleanup_registry(); 1.108 + return exitcode; 1.109 +}