1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/test/memstream_tests.c Tue Oct 09 15:02:40 2012 +0200 1.3 @@ -0,0 +1,231 @@ 1.4 +/* 1.5 + * 1.6 + */ 1.7 + 1.8 +#include "memstream_tests.h" 1.9 + 1.10 +UCX_TEST_IMPLEMENT(test_ucx_memseektell) { 1.11 + char *buffer = malloc(16); 1.12 + memset(buffer, 32, 7); 1.13 + buffer[7] = 0; 1.14 + 1.15 + UcxMemstream *m = ucx_memopen(buffer, 16); 1.16 + int r; 1.17 + 1.18 + UCX_TEST_BEGIN 1.19 + 1.20 + r = ucx_memseek(m, 5, SEEK_SET); 1.21 + UCX_TEST_ASSERT(r == 0, "seek SET+5 failed"); 1.22 + UCX_TEST_ASSERT(ucx_memtell(m) == 5, "seek SET+5 set wrong position"); 1.23 + 1.24 + r = ucx_memseek(m, 20, SEEK_SET); 1.25 + UCX_TEST_ASSERT(r != 0, "seek beyond bounds shall fail"); 1.26 + UCX_TEST_ASSERT(ucx_memtell(m) == 5, 1.27 + "failed seek shall leave pos unchanged"); 1.28 + 1.29 + r = ucx_memseek(m, 5, SEEK_CUR); 1.30 + UCX_TEST_ASSERT(r == 0, "seek CUR+5 failed"); 1.31 + UCX_TEST_ASSERT(ucx_memtell(m) == 10, "seek CUR+5 set wrong position"); 1.32 + 1.33 + r = ucx_memseek(m, 10, SEEK_CUR); 1.34 + UCX_TEST_ASSERT(r != 0, "seek CUR beyond bounds shall fail"); 1.35 + UCX_TEST_ASSERT(ucx_memtell(m) == 10, 1.36 + "failed seek shall leave pos unchanged"); 1.37 + 1.38 + r = ucx_memseek(m, -5, SEEK_END); 1.39 + UCX_TEST_ASSERT(r == 0, "seek END-5 failed"); 1.40 + UCX_TEST_ASSERT(ucx_memtell(m) == 2, "seek END-5 set wrong position"); 1.41 + 1.42 + r = ucx_memseek(m, -10, SEEK_END); 1.43 + UCX_TEST_ASSERT(r != 0, "seek END beyond bounds shall fail"); 1.44 + UCX_TEST_ASSERT(ucx_memtell(m) == 2, 1.45 + "failed seek shall leave pos unchanged"); 1.46 + 1.47 + UCX_TEST_END 1.48 + 1.49 + ucx_memclose(m); 1.50 + free(buffer); 1.51 +} 1.52 + 1.53 +UCX_TEST_IMPLEMENT(test_ucx_memputc) { 1.54 + char *buffer = malloc(16); 1.55 + memset(buffer, 32, 16); 1.56 + 1.57 + UcxMemstream *m = ucx_memopen(buffer, 16); 1.58 + int r; 1.59 + 1.60 + UCX_TEST_BEGIN 1.61 + 1.62 + ucx_memputc(m, 48); ucx_memputc(m, 48); ucx_memputc(m, 48); 1.63 + UCX_TEST_ASSERT(ucx_memtell(m) == 3, "pos wrong after first 3 puts"); 1.64 + ucx_memseek(m, 10, SEEK_CUR); 1.65 + ucx_memputc(m, 48); ucx_memputc(m, 48); ucx_memputc(m, 48); 1.66 + UCX_TEST_ASSERT(ucx_memtell(m) == 16, "pos wrong after last 3 puts"); 1.67 + UCX_TEST_ASSERT(ucx_memeof(m), "eof not set"); 1.68 + UCX_TEST_ASSERT(!ucx_memoverflow(m), "overflow shall not be set"); 1.69 + UCX_TEST_ASSERT(ucx_memputc(m, 48) == EOF, "put shall return EOF on memof"); 1.70 + UCX_TEST_ASSERT(memcmp(buffer, "000 000", 16) == 0, 1.71 + "buffer contains incorrect content"); 1.72 + 1.73 + UCX_TEST_END 1.74 + 1.75 + ucx_memclose(m); 1.76 + free(buffer); 1.77 +} 1.78 + 1.79 +UCX_TEST_IMPLEMENT(test_ucx_memgetc) { 1.80 + char *buffer = malloc(16); 1.81 + memset(buffer, 32, 8); 1.82 + for (int i = 8; i < 16 ; i++) { 1.83 + buffer[i] = 40+i; 1.84 + } 1.85 + 1.86 + UcxMemstream *m = ucx_memopen(buffer, 16); 1.87 + int r; 1.88 + 1.89 + UCX_TEST_BEGIN 1.90 + 1.91 + char rb[16]; 1.92 + for (int i = 0 ; i < 16 ; i++) { 1.93 + UCX_TEST_ASSERT(ucx_memtell(m) == i, "pos wrong during read loop"); 1.94 + UCX_TEST_ASSERT(!ucx_memeof(m), 1.95 + "EOF shall not be set during read loop"); 1.96 + rb[i] = ucx_memgetc(m); 1.97 + } 1.98 + UCX_TEST_ASSERT(ucx_memtell(m) == 16, "pos wrong after read loop"); 1.99 + UCX_TEST_ASSERT(ucx_memeof(m), "EOF not set"); 1.100 + UCX_TEST_ASSERT(memcmp(rb, " 01234567", 16) == 0, 1.101 + "read data incorrect"); 1.102 + 1.103 + UCX_TEST_END 1.104 + 1.105 + ucx_memclose(m); 1.106 + free(buffer); 1.107 +} 1.108 + 1.109 +UCX_TEST_IMPLEMENT(test_ucx_memwrite) { 1.110 + char *buffer = malloc(16); 1.111 + memset(buffer, 32, 8); 1.112 + for (int i = 8; i < 16 ; i++) { 1.113 + buffer[i] = 40+i; 1.114 + } 1.115 + 1.116 + UcxMemstream *m = ucx_memopen(buffer, 16); 1.117 + int r; 1.118 + 1.119 + UCX_TEST_BEGIN 1.120 + 1.121 + char* teststring = "this is way too much"; 1.122 + r = ucx_memwrite(teststring, 1, 20, m); 1.123 + UCX_TEST_ASSERT(r == 16, "string not correctly trimed"); 1.124 + UCX_TEST_ASSERT(memcmp(buffer, teststring, 16) == 0, 1.125 + "buffer data incorrect"); 1.126 + UCX_TEST_ASSERT(ucx_memeof(m), "eof shall be set"); 1.127 + UCX_TEST_ASSERT(!ucx_memoverflow(m), "no overflow shall be caused"); 1.128 + 1.129 + ucx_memseek(m, 8, SEEK_SET); 1.130 + r = ucx_memwrite("not", 1, 3, m); 1.131 + UCX_TEST_ASSERT(r == 3, "three bytes should be replace"); 1.132 + UCX_TEST_ASSERT(memcmp(buffer, "this is not too much", 16) == 0, 1.133 + "modified buffer is incorrect"); 1.134 + 1.135 + char* threebytestring = " t h r e e "; 1.136 + memset(buffer, 49, 16); 1.137 + ucx_memseek(m, 0, SEEK_SET); 1.138 + r = ucx_memwrite(threebytestring, 3, 6, m); 1.139 + UCX_TEST_ASSERT(r == 15, "three byte string not correctly trimed"); 1.140 + UCX_TEST_ASSERT(ucx_memtell(m) == 15, 1.141 + "position after write of three byte string incorrect"); 1.142 + UCX_TEST_ASSERT(!ucx_memeof(m), "eof shall not be set"); 1.143 + UCX_TEST_ASSERT(memcmp(buffer, " t h r e e1", 16) == 0, 1.144 + "bufer is incorrect after three byte string has been written"); 1.145 + 1.146 + UCX_TEST_END 1.147 + 1.148 + ucx_memclose(m); 1.149 + free(buffer); 1.150 +} 1.151 + 1.152 +UCX_TEST_IMPLEMENT(test_ucx_memread) { 1.153 + char *buffer = malloc(16); 1.154 + memset(buffer, 56, 8); 1.155 + for (int i = 8; i < 16 ; i++) { 1.156 + buffer[i] = 40+i; 1.157 + } 1.158 + 1.159 + UcxMemstream *m = ucx_memopen(buffer, 16); 1.160 + int r; 1.161 + 1.162 + UCX_TEST_BEGIN 1.163 + 1.164 + char rb[16]; 1.165 + memset(rb, 32, 16); 1.166 + 1.167 + ucx_memseek(m, 8, SEEK_SET); 1.168 + r = ucx_memread(rb, 1, 16, m); 1.169 + UCX_TEST_ASSERT(r == 8, "read did not stop at buffer end"); 1.170 + UCX_TEST_ASSERT(memcmp(rb, "01234567 ", 16) == 0, 1.171 + "buffer incorrect after first read"); 1.172 + UCX_TEST_ASSERT(ucx_memeof(m), "eof shall be set"); 1.173 + 1.174 + ucx_memseek(m, 0, SEEK_SET); 1.175 + r = ucx_memread(rb+8, 1, 8, m); 1.176 + UCX_TEST_ASSERT(r == 8, "read did not read the specified amount of bytes"); 1.177 + UCX_TEST_ASSERT(memcmp(rb, "0123456788888888", 16) == 0, 1.178 + "buffer incorrect after second read"); 1.179 + 1.180 + ucx_memseek(m, 0, SEEK_SET); 1.181 + r = ucx_memread(rb, 3, 6, m); 1.182 + UCX_TEST_ASSERT(r == 15, 1.183 + "three byte read did not read the desired amount of bytes"); 1.184 + UCX_TEST_ASSERT(memcmp(rb, "8888888801234568", 16) == 0, 1.185 + "buffer incorrect after three byte read"); 1.186 + 1.187 + UCX_TEST_END 1.188 + 1.189 + ucx_memclose(m); 1.190 + free(buffer); 1.191 +} 1.192 + 1.193 +UCX_TEST_IMPLEMENT(test_ucx_memprintf) { 1.194 + char *buffer = malloc(32); 1.195 + UcxMemstream *m = ucx_memopen(buffer, 16); 1.196 + 1.197 + UCX_TEST_BEGIN 1.198 + int r = ucx_memprintf(m, "number: %d char: %c", 15, '6'); 1.199 + UCX_TEST_ASSERT(r == 18, "incorrect number of bytes written"); 1.200 + UCX_TEST_ASSERT(ucx_memoverflow(m), "overflow shall be detected"); 1.201 + UCX_TEST_ASSERT(memcmp(buffer, "number: 15 char:", 16) == 0, 1.202 + "incorrect buffer content"); 1.203 + 1.204 + ucx_memseek(m, 0, SEEK_SET); 1.205 + ucx_memprintf(m, "a: %d - b: %d", 1, 2); 1.206 + UCX_TEST_ASSERT(!ucx_memoverflow(m), "no overflow shall be deteceted"); 1.207 + UCX_TEST_ASSERT(memcmp(buffer, "a: 1 - b: 2char:", 16), 1.208 + "incorrect modified buffer content"); 1.209 + UCX_TEST_ASSERT(ucx_memtell(m) == 11, "incorrect position"); 1.210 + 1.211 + UCX_TEST_END 1.212 + 1.213 + ucx_memclose(m); 1.214 + free(buffer); 1.215 +} 1.216 + 1.217 +UCX_TEST_IMPLEMENT(test_ucx_memscanf) { 1.218 + char *buffer = "string 3.5 1 stuff"; 1.219 + UcxMemstream *m = ucx_memopen(buffer, 16); 1.220 + 1.221 + char s[6]; 1.222 + float f; 1.223 + int d; 1.224 + UCX_TEST_BEGIN 1.225 + int r = ucx_memscanf(m, "%s %f %d", s, &f, &d); 1.226 + UCX_TEST_ASSERT(r == 3, "3 arguments shall be read"); 1.227 + UCX_TEST_ASSERT(strncmp(s, "string", 6) == 0, "incorrect string"); 1.228 + UCX_TEST_ASSERT(f == 3.5, "incorrect float"); 1.229 + UCX_TEST_ASSERT(d == 1, "incorrect integer"); 1.230 + UCX_TEST_ASSERT(ucx_memtell(m) == 12, "incorrect position"); 1.231 + UCX_TEST_END 1.232 + 1.233 + ucx_memclose(m); 1.234 +}