1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/test/buffer_tests.c Wed Oct 10 09:54:57 2012 +0200 1.3 @@ -0,0 +1,186 @@ 1.4 +/* 1.5 + * 1.6 + */ 1.7 + 1.8 +#include "buffer_tests.h" 1.9 + 1.10 +UCX_TEST_IMPLEMENT(test_ucx_buffer_seektell) { 1.11 + char *buffer = malloc(16); 1.12 + memset(buffer, 32, 7); 1.13 + buffer[7] = 0; 1.14 + 1.15 + UcxBuffer *b = ucx_buffer_new(buffer, 16); 1.16 + int r; 1.17 + 1.18 + UCX_TEST_BEGIN 1.19 + 1.20 + r = ucx_buffer_seek(b, 5, SEEK_SET); 1.21 + UCX_TEST_ASSERT(r == 0, "seek SET+5 failed"); 1.22 + UCX_TEST_ASSERT(ucx_buffer_tell(b) == 5, "seek SET+5 set wrong position"); 1.23 + 1.24 + r = ucx_buffer_seek(b, 20, SEEK_SET); 1.25 + UCX_TEST_ASSERT(r != 0, "seek beyond bounds shall fail"); 1.26 + UCX_TEST_ASSERT(ucx_buffer_tell(b) == 5, 1.27 + "failed seek shall leave pos unchanged"); 1.28 + 1.29 + r = ucx_buffer_seek(b, 5, SEEK_CUR); 1.30 + UCX_TEST_ASSERT(r == 0, "seek CUR+5 failed"); 1.31 + UCX_TEST_ASSERT(ucx_buffer_tell(b) == 10, "seek CUR+5 set wrong position"); 1.32 + 1.33 + r = ucx_buffer_seek(b, 10, SEEK_CUR); 1.34 + UCX_TEST_ASSERT(r != 0, "seek CUR beyond bounds shall fail"); 1.35 + UCX_TEST_ASSERT(ucx_buffer_tell(b) == 10, 1.36 + "failed seek shall leave pos unchanged"); 1.37 + 1.38 + r = ucx_buffer_seek(b, -5, SEEK_END); 1.39 + UCX_TEST_ASSERT(r == 0, "seek END-5 failed"); 1.40 + UCX_TEST_ASSERT(ucx_buffer_tell(b) == 2, "seek END-5 set wrong position"); 1.41 + 1.42 + r = ucx_buffer_seek(b, -10, SEEK_END); 1.43 + UCX_TEST_ASSERT(r != 0, "seek END beyond bounds shall fail"); 1.44 + UCX_TEST_ASSERT(ucx_buffer_tell(b) == 2, 1.45 + "failed seek shall leave pos unchanged"); 1.46 + 1.47 + UCX_TEST_END 1.48 + 1.49 + ucx_buffer_free(b); 1.50 + free(buffer); 1.51 +} 1.52 + 1.53 +UCX_TEST_IMPLEMENT(test_ucx_buffer_putc) { 1.54 + char *buffer = malloc(16); 1.55 + memset(buffer, 32, 16); 1.56 + 1.57 + UcxBuffer *b = ucx_buffer_new(buffer, 16); 1.58 + int r; 1.59 + 1.60 + UCX_TEST_BEGIN 1.61 + 1.62 + ucx_buffer_putc(b, 48); ucx_buffer_putc(b, 48); ucx_buffer_putc(b, 48); 1.63 + UCX_TEST_ASSERT(ucx_buffer_tell(b) == 3, "pos wrong after first 3 puts"); 1.64 + ucx_buffer_seek(b, 10, SEEK_CUR); 1.65 + ucx_buffer_putc(b, 48); ucx_buffer_putc(b, 48); ucx_buffer_putc(b, 48); 1.66 + UCX_TEST_ASSERT(ucx_buffer_tell(b) == 16, "pos wrong after last 3 puts"); 1.67 + UCX_TEST_ASSERT(ucx_buffer_eof(b), "eof not set"); 1.68 + UCX_TEST_ASSERT(ucx_buffer_putc(b, 48) == EOF, "put shall return EOF on memof"); 1.69 + UCX_TEST_ASSERT(memcmp(buffer, "000 000", 16) == 0, 1.70 + "buffer contains incorrect content"); 1.71 + 1.72 + UCX_TEST_END 1.73 + 1.74 + ucx_buffer_free(b); 1.75 + free(buffer); 1.76 +} 1.77 + 1.78 +UCX_TEST_IMPLEMENT(test_ucx_buffer_getc) { 1.79 + char *buffer = malloc(16); 1.80 + memset(buffer, 32, 8); 1.81 + for (int i = 8; i < 16 ; i++) { 1.82 + buffer[i] = 40+i; 1.83 + } 1.84 + 1.85 + UcxBuffer *b = ucx_buffer_new(buffer, 16); 1.86 + int r; 1.87 + 1.88 + UCX_TEST_BEGIN 1.89 + 1.90 + char rb[16]; 1.91 + for (int i = 0 ; i < 16 ; i++) { 1.92 + UCX_TEST_ASSERT(ucx_buffer_tell(b) == i, "pos wrong during read loop"); 1.93 + UCX_TEST_ASSERT(!ucx_buffer_eof(b), 1.94 + "EOF shall not be set during read loop"); 1.95 + rb[i] = ucx_buffer_getc(b); 1.96 + } 1.97 + UCX_TEST_ASSERT(ucx_buffer_tell(b) == 16, "pos wrong after read loop"); 1.98 + UCX_TEST_ASSERT(ucx_buffer_eof(b), "EOF not set"); 1.99 + UCX_TEST_ASSERT(memcmp(rb, " 01234567", 16) == 0, 1.100 + "read data incorrect"); 1.101 + 1.102 + UCX_TEST_END 1.103 + 1.104 + ucx_buffer_free(b); 1.105 + free(buffer); 1.106 +} 1.107 + 1.108 +UCX_TEST_IMPLEMENT(test_ucx_buffer_write) { 1.109 + char *buffer = malloc(16); 1.110 + memset(buffer, 32, 8); 1.111 + for (int i = 8; i < 16 ; i++) { 1.112 + buffer[i] = 40+i; 1.113 + } 1.114 + 1.115 + UcxBuffer *b = ucx_buffer_new(buffer, 16); 1.116 + int r; 1.117 + 1.118 + UCX_TEST_BEGIN 1.119 + 1.120 + char* teststring = "this is way too much"; 1.121 + r = ucx_buffer_write(teststring, 1, 20, b); 1.122 + UCX_TEST_ASSERT(r == 16, "string not correctly trimed"); 1.123 + UCX_TEST_ASSERT(memcmp(buffer, teststring, 16) == 0, 1.124 + "buffer data incorrect"); 1.125 + UCX_TEST_ASSERT(ucx_buffer_eof(b), "eof shall be set"); 1.126 + 1.127 + ucx_buffer_seek(b, 8, SEEK_SET); 1.128 + r = ucx_buffer_write("not", 1, 3, b); 1.129 + UCX_TEST_ASSERT(r == 3, "three bytes should be replace"); 1.130 + UCX_TEST_ASSERT(memcmp(buffer, "this is not too much", 16) == 0, 1.131 + "modified buffer is incorrect"); 1.132 + 1.133 + char* threebytestring = " t h r e e "; 1.134 + memset(buffer, 49, 16); 1.135 + ucx_buffer_seek(b, 0, SEEK_SET); 1.136 + r = ucx_buffer_write(threebytestring, 3, 6, b); 1.137 + UCX_TEST_ASSERT(r == 15, "three byte string not correctly trimed"); 1.138 + UCX_TEST_ASSERT(ucx_buffer_tell(b) == 15, 1.139 + "position after write of three byte string incorrect"); 1.140 + UCX_TEST_ASSERT(!ucx_buffer_eof(b), "eof shall not be set"); 1.141 + UCX_TEST_ASSERT(memcmp(buffer, " t h r e e1", 16) == 0, 1.142 + "bufer is incorrect after three byte string has been written"); 1.143 + 1.144 + UCX_TEST_END 1.145 + 1.146 + ucx_buffer_free(b); 1.147 + free(buffer); 1.148 +} 1.149 + 1.150 +UCX_TEST_IMPLEMENT(test_ucx_buffer_read) { 1.151 + char *buffer = malloc(16); 1.152 + memset(buffer, 56, 8); 1.153 + for (int i = 8; i < 16 ; i++) { 1.154 + buffer[i] = 40+i; 1.155 + } 1.156 + 1.157 + UcxBuffer *b = ucx_buffer_new(buffer, 16); 1.158 + int r; 1.159 + 1.160 + UCX_TEST_BEGIN 1.161 + 1.162 + char rb[16]; 1.163 + memset(rb, 32, 16); 1.164 + 1.165 + ucx_buffer_seek(b, 8, SEEK_SET); 1.166 + r = ucx_buffer_read(rb, 1, 16, b); 1.167 + UCX_TEST_ASSERT(r == 8, "read did not stop at buffer end"); 1.168 + UCX_TEST_ASSERT(memcmp(rb, "01234567 ", 16) == 0, 1.169 + "buffer incorrect after first read"); 1.170 + UCX_TEST_ASSERT(ucx_buffer_eof(b), "eof shall be set"); 1.171 + 1.172 + ucx_buffer_seek(b, 0, SEEK_SET); 1.173 + r = ucx_buffer_read(rb+8, 1, 8, b); 1.174 + UCX_TEST_ASSERT(r == 8, "read did not read the specified amount of bytes"); 1.175 + UCX_TEST_ASSERT(memcmp(rb, "0123456788888888", 16) == 0, 1.176 + "buffer incorrect after second read"); 1.177 + 1.178 + ucx_buffer_seek(b, 0, SEEK_SET); 1.179 + r = ucx_buffer_read(rb, 3, 6, b); 1.180 + UCX_TEST_ASSERT(r == 15, 1.181 + "three byte read did not read the desired amount of bytes"); 1.182 + UCX_TEST_ASSERT(memcmp(rb, "8888888801234568", 16) == 0, 1.183 + "buffer incorrect after three byte read"); 1.184 + 1.185 + UCX_TEST_END 1.186 + 1.187 + ucx_buffer_free(b); 1.188 + free(buffer); 1.189 +}