Mon, 05 May 2014 15:56:39 +0200
improved more buffer tests + some doc fixes
test/buffer_tests.c | file | annotate | diff | comparison | revisions | |
test/buffer_tests.h | file | annotate | diff | comparison | revisions | |
test/main.c | file | annotate | diff | comparison | revisions | |
ucx/buffer.h | file | annotate | diff | comparison | revisions |
1.1 --- a/test/buffer_tests.c Mon May 05 14:52:40 2014 +0200 1.2 +++ b/test/buffer_tests.c Mon May 05 15:56:39 2014 +0200 1.3 @@ -34,15 +34,50 @@ 1.4 * 1.5 * ucx_buffer_extend 1.6 * ucx_buffer_extract 1.7 - * ucx_buffer_free 1.8 - * ucx_buffer_getc 1.9 - * ucx_buffer_new 1.10 - * ucx_buffer_puts 1.11 - * ucx_buffer_read 1.12 * ucx_buffer_write 1.13 * 1.14 */ 1.15 1.16 +UCX_TEST(test_ucx_buffer_new) { 1.17 + UcxBuffer *b = ucx_buffer_new(NULL, 16, UCX_BUFFER_AUTOEXTEND); 1.18 + UcxBuffer *b2 = ucx_buffer_new(NULL, 32, UCX_BUFFER_DEFAULT); 1.19 + UCX_TEST_BEGIN 1.20 + 1.21 + UCX_TEST_ASSERT(b->capacity==16, "wrong capacity"); 1.22 + UCX_TEST_ASSERT(b2->capacity==32, "wrong capacity"); 1.23 + 1.24 + UCX_TEST_ASSERT(b->size==0, "wrong size"); 1.25 + UCX_TEST_ASSERT(b2->size==0, "wrong size"); 1.26 + 1.27 + UCX_TEST_ASSERT(b->pos==0, "wrong position"); 1.28 + UCX_TEST_ASSERT(b2->pos==0, "wrong position"); 1.29 + 1.30 + UCX_TEST_ASSERT(b->flags==(UCX_BUFFER_AUTOEXTEND|UCX_BUFFER_AUTOFREE), 1.31 + "wrong flags for autoextending buffer"); 1.32 + UCX_TEST_ASSERT(b2->flags==UCX_BUFFER_AUTOFREE, 1.33 + "wrong flags for default bufer"); 1.34 + 1.35 + UCX_TEST_END 1.36 + ucx_buffer_free(b2); 1.37 + ucx_buffer_free(b); 1.38 +} 1.39 + 1.40 +UCX_TEST(test_ucx_buffer_new_prealloc) { 1.41 + char* test = (char*) malloc(16); 1.42 + UcxBuffer *b = ucx_buffer_new(test, 16, UCX_BUFFER_DEFAULT); 1.43 + UCX_TEST_BEGIN 1.44 + 1.45 + UCX_TEST_ASSERT(b->capacity==16, "wrong capacity"); 1.46 + UCX_TEST_ASSERT(b->size==0, "wrong size"); 1.47 + UCX_TEST_ASSERT(b->pos==0, "wrong position"); 1.48 + 1.49 + UCX_TEST_ASSERT(b->flags==0, "wrong flags - all should be cleared"); 1.50 + 1.51 + UCX_TEST_END 1.52 + free(test); 1.53 + ucx_buffer_free(b); 1.54 +} 1.55 + 1.56 UCX_TEST(test_ucx_buffer_eof) { 1.57 char *test = "0123456789ABCDEF"; 1.58 UcxBuffer *b = ucx_buffer_new(test, 16, UCX_BUFFER_DEFAULT); 1.59 @@ -315,15 +350,19 @@ 1.60 1.61 char rb[16]; 1.62 for (size_t i = 0 ; i < 16 ; i++) { 1.63 - UCX_TEST_ASSERT(b->pos == i, "pos wrong during read loop"); 1.64 - UCX_TEST_ASSERT(!ucx_buffer_eof(b), 1.65 - "EOF shall not be set during read loop"); 1.66 + UCX_TEST_ASSERT(b->pos == i, "wrong position"); 1.67 + UCX_TEST_ASSERT(!ucx_buffer_eof(b), "EOF false positive"); 1.68 rb[i] = ucx_buffer_getc(b); 1.69 } 1.70 - UCX_TEST_ASSERT(b->pos == 16, "pos wrong after read loop"); 1.71 - UCX_TEST_ASSERT(ucx_buffer_eof(b), "EOF not set"); 1.72 UCX_TEST_ASSERT(memcmp(rb, " 01234567", 16) == 0, 1.73 - "read data incorrect"); 1.74 + "read data incorrect"); 1.75 + 1.76 + UCX_TEST_ASSERT(ucx_buffer_eof(b), "EOF not set after last possible read"); 1.77 + UCX_TEST_ASSERT(b->pos == 16, "wrong position after EOF"); 1.78 + 1.79 + UCX_TEST_ASSERT(ucx_buffer_getc(b) == EOF, 1.80 + "out of bounds read does not return EOF"); 1.81 + UCX_TEST_ASSERT(b->pos == 16, "wrong position after out of bounds read"); 1.82 1.83 UCX_TEST_END 1.84 1.85 @@ -399,6 +438,8 @@ 1.86 1.87 UCX_TEST(test_ucx_buffer_read) { 1.88 UcxBuffer *b = ucx_buffer_new(NULL, 8, UCX_BUFFER_AUTOFREE); 1.89 + ucx_buffer_write("01234567", 1, 8, b); 1.90 + b->pos = 0; 1.91 1.92 char buf[32]; 1.93 memset(buf, 'X', 32); 1.94 @@ -406,28 +447,50 @@ 1.95 1.96 UCX_TEST_BEGIN 1.97 1.98 + ucx_buffer_seek(b, 2, SEEK_SET); 1.99 + r = ucx_buffer_read(buf, 1, 2, b); 1.100 + UCX_TEST_ASSERT(r == 2, "wrong number of bytes read (2 items)"); 1.101 + UCX_TEST_ASSERT(buf[0] == '2' && buf[1] == '3' && buf[2] == 'X', 1.102 + "buffer incorrect after read"); 1.103 + UCX_TEST_ASSERT(b->pos == 4, "wrong position after read (2 items)"); 1.104 + 1.105 + UCX_TEST_END 1.106 + 1.107 + ucx_buffer_free(b); 1.108 +} 1.109 + 1.110 +UCX_TEST(test_ucx_buffer_read_oob) { 1.111 + UcxBuffer *b = ucx_buffer_new(NULL, 8, UCX_BUFFER_AUTOFREE); 1.112 ucx_buffer_write("01234567", 1, 8, b); 1.113 - UCX_TEST_ASSERT(b->pos == 8, "buffer not correctly filled"); 1.114 + 1.115 + char buf[32]; 1.116 + memset(buf, 'X', 32); 1.117 + int r; 1.118 + 1.119 + UCX_TEST_BEGIN 1.120 + 1.121 + b->pos = 2; 1.122 + r = ucx_buffer_read(buf + 2, 1, 8, b); 1.123 + UCX_TEST_ASSERT(r == 6, "wrong number of bytes read (8 items)"); 1.124 + UCX_TEST_ASSERT(memcmp(buf, "XX234567XX", 10) == 0, 1.125 + "buffer incorrect after read"); 1.126 + UCX_TEST_ASSERT(b->pos == 8, 1.127 + "wrong position after read (8 items out of bound)"); 1.128 + 1.129 b->pos = 0; 1.130 + memset(buf, 'X', 32); 1.131 1.132 - r = ucx_buffer_read(buf, 1, 2, b); 1.133 - UCX_TEST_ASSERT(r == 2, "wrong number of bytes read"); 1.134 - UCX_TEST_ASSERT(buf[0] == '0' && buf[1] == '1' && buf[2] == 'X', 1.135 - "buffer incorrect after first read"); 1.136 - 1.137 - r = ucx_buffer_read(buf + 2, 1, 8, b); 1.138 - UCX_TEST_ASSERT(r == 6, "wrong number of bytes read(2)"); 1.139 - UCX_TEST_ASSERT(memcmp(buf, "01234567XX", 10) == 0, 1.140 - "buffer incorrect after second read"); 1.141 - 1.142 - memset(buf, 'X', 32); 1.143 - ucx_buffer_seek(b, 0, SEEK_SET); 1.144 r = ucx_buffer_read(buf, 3, 3, b); 1.145 1.146 UCX_TEST_ASSERT(r == 2, "wrong number of blocks read"); 1.147 UCX_TEST_ASSERT(memcmp(buf, "012345XX", 8) == 0, 1.148 - "buffer incorrect after three byte read"); 1.149 + "buffer incorrect after block out of bounds read"); 1.150 1.151 + r = ucx_buffer_read(buf+6, 1, 5, b); 1.152 + 1.153 + UCX_TEST_ASSERT(r == 2, "wrong number of remaining bytes read"); 1.154 + UCX_TEST_ASSERT(memcmp(buf, "01234567XX", 10) == 0, 1.155 + "buffer incorrect after remaining byte read"); 1.156 1.157 UCX_TEST_END 1.158
2.1 --- a/test/buffer_tests.h Mon May 05 14:52:40 2014 +0200 2.2 +++ b/test/buffer_tests.h Mon May 05 15:56:39 2014 +0200 2.3 @@ -48,11 +48,15 @@ 2.4 UCX_TEST(test_ucx_buffer_putc_oob); 2.5 UCX_TEST(test_ucx_buffer_putc_oobae); 2.6 UCX_TEST(test_ucx_buffer_putc_size); 2.7 +UCX_TEST(test_ucx_buffer_new); 2.8 +UCX_TEST(test_ucx_buffer_new_prealloc); 2.9 +UCX_TEST(test_ucx_buffer_getc); 2.10 +UCX_TEST(test_ucx_buffer_read); 2.11 +UCX_TEST(test_ucx_buffer_read_oob); 2.12 2.13 -UCX_TEST(test_ucx_buffer_getc); 2.14 UCX_TEST(test_ucx_buffer_write); 2.15 UCX_TEST(test_ucx_buffer_write_ax); 2.16 -UCX_TEST(test_ucx_buffer_read); 2.17 + 2.18 UCX_TEST(test_ucx_buffer_extract); 2.19 UCX_TEST(test_ucx_stream_copy); 2.20
3.1 --- a/test/main.c Mon May 05 14:52:40 2014 +0200 3.2 +++ b/test/main.c Mon May 05 15:56:39 2014 +0200 3.3 @@ -177,6 +177,8 @@ 3.4 ucx_test_register(suite, test_ucx_properties_store); 3.5 3.6 /* UcxBuffer Tests */ 3.7 + ucx_test_register(suite, test_ucx_buffer_new); 3.8 + ucx_test_register(suite, test_ucx_buffer_new_prealloc); 3.9 ucx_test_register(suite, test_ucx_buffer_eof); 3.10 ucx_test_register(suite, test_ucx_buffer_seek_set); 3.11 ucx_test_register(suite, test_ucx_buffer_seek_cur); 3.12 @@ -190,9 +192,10 @@ 3.13 ucx_test_register(suite, test_ucx_buffer_putc_oobae); 3.14 ucx_test_register(suite, test_ucx_buffer_putc_size); 3.15 ucx_test_register(suite, test_ucx_buffer_getc); 3.16 + ucx_test_register(suite, test_ucx_buffer_read); 3.17 + ucx_test_register(suite, test_ucx_buffer_read_oob); 3.18 ucx_test_register(suite, test_ucx_buffer_write); 3.19 ucx_test_register(suite, test_ucx_buffer_write_ax); 3.20 - ucx_test_register(suite, test_ucx_buffer_read); 3.21 ucx_test_register(suite, test_ucx_buffer_extract); 3.22 ucx_test_register(suite, test_ucx_stream_copy); 3.23
4.1 --- a/ucx/buffer.h Mon May 05 14:52:40 2014 +0200 4.2 +++ b/ucx/buffer.h Mon May 05 15:56:39 2014 +0200 4.3 @@ -220,7 +220,7 @@ 4.4 * @param size the length of one element 4.5 * @param nitems the element count 4.6 * @param buffer the UcxBuffer to read from 4.7 - * @return the total count of bytes read 4.8 + * @return the total number of elements read 4.9 */ 4.10 size_t ucx_buffer_read(void *ptr, size_t size, size_t nitems, 4.11 UcxBuffer *buffer);