Tue, 09 Oct 2012 16:46:29 +0200
some fixes
universe@56 | 1 | /* |
universe@56 | 2 | * |
universe@56 | 3 | */ |
universe@56 | 4 | |
universe@56 | 5 | #include "memstream_tests.h" |
universe@56 | 6 | |
universe@56 | 7 | UCX_TEST_IMPLEMENT(test_ucx_memseektell) { |
universe@56 | 8 | char *buffer = malloc(16); |
universe@56 | 9 | memset(buffer, 32, 7); |
universe@56 | 10 | buffer[7] = 0; |
universe@56 | 11 | |
universe@56 | 12 | UcxMemstream *m = ucx_memopen(buffer, 16); |
universe@56 | 13 | int r; |
universe@56 | 14 | |
universe@56 | 15 | UCX_TEST_BEGIN |
universe@56 | 16 | |
universe@56 | 17 | r = ucx_memseek(m, 5, SEEK_SET); |
universe@56 | 18 | UCX_TEST_ASSERT(r == 0, "seek SET+5 failed"); |
universe@56 | 19 | UCX_TEST_ASSERT(ucx_memtell(m) == 5, "seek SET+5 set wrong position"); |
universe@56 | 20 | |
universe@56 | 21 | r = ucx_memseek(m, 20, SEEK_SET); |
universe@56 | 22 | UCX_TEST_ASSERT(r != 0, "seek beyond bounds shall fail"); |
universe@56 | 23 | UCX_TEST_ASSERT(ucx_memtell(m) == 5, |
universe@56 | 24 | "failed seek shall leave pos unchanged"); |
universe@56 | 25 | |
universe@56 | 26 | r = ucx_memseek(m, 5, SEEK_CUR); |
universe@56 | 27 | UCX_TEST_ASSERT(r == 0, "seek CUR+5 failed"); |
universe@56 | 28 | UCX_TEST_ASSERT(ucx_memtell(m) == 10, "seek CUR+5 set wrong position"); |
universe@56 | 29 | |
universe@56 | 30 | r = ucx_memseek(m, 10, SEEK_CUR); |
universe@56 | 31 | UCX_TEST_ASSERT(r != 0, "seek CUR beyond bounds shall fail"); |
universe@56 | 32 | UCX_TEST_ASSERT(ucx_memtell(m) == 10, |
universe@56 | 33 | "failed seek shall leave pos unchanged"); |
universe@56 | 34 | |
universe@56 | 35 | r = ucx_memseek(m, -5, SEEK_END); |
universe@56 | 36 | UCX_TEST_ASSERT(r == 0, "seek END-5 failed"); |
universe@56 | 37 | UCX_TEST_ASSERT(ucx_memtell(m) == 2, "seek END-5 set wrong position"); |
universe@56 | 38 | |
universe@56 | 39 | r = ucx_memseek(m, -10, SEEK_END); |
universe@56 | 40 | UCX_TEST_ASSERT(r != 0, "seek END beyond bounds shall fail"); |
universe@56 | 41 | UCX_TEST_ASSERT(ucx_memtell(m) == 2, |
universe@56 | 42 | "failed seek shall leave pos unchanged"); |
universe@56 | 43 | |
universe@56 | 44 | UCX_TEST_END |
universe@56 | 45 | |
universe@56 | 46 | ucx_memclose(m); |
universe@56 | 47 | free(buffer); |
universe@56 | 48 | } |
universe@56 | 49 | |
universe@56 | 50 | UCX_TEST_IMPLEMENT(test_ucx_memputc) { |
universe@56 | 51 | char *buffer = malloc(16); |
universe@56 | 52 | memset(buffer, 32, 16); |
universe@56 | 53 | |
universe@56 | 54 | UcxMemstream *m = ucx_memopen(buffer, 16); |
universe@56 | 55 | int r; |
universe@56 | 56 | |
universe@56 | 57 | UCX_TEST_BEGIN |
universe@56 | 58 | |
universe@56 | 59 | ucx_memputc(m, 48); ucx_memputc(m, 48); ucx_memputc(m, 48); |
universe@56 | 60 | UCX_TEST_ASSERT(ucx_memtell(m) == 3, "pos wrong after first 3 puts"); |
universe@56 | 61 | ucx_memseek(m, 10, SEEK_CUR); |
universe@56 | 62 | ucx_memputc(m, 48); ucx_memputc(m, 48); ucx_memputc(m, 48); |
universe@56 | 63 | UCX_TEST_ASSERT(ucx_memtell(m) == 16, "pos wrong after last 3 puts"); |
universe@56 | 64 | UCX_TEST_ASSERT(ucx_memeof(m), "eof not set"); |
universe@56 | 65 | UCX_TEST_ASSERT(!ucx_memoverflow(m), "overflow shall not be set"); |
universe@56 | 66 | UCX_TEST_ASSERT(ucx_memputc(m, 48) == EOF, "put shall return EOF on memof"); |
universe@56 | 67 | UCX_TEST_ASSERT(memcmp(buffer, "000 000", 16) == 0, |
universe@56 | 68 | "buffer contains incorrect content"); |
universe@56 | 69 | |
universe@56 | 70 | UCX_TEST_END |
universe@56 | 71 | |
universe@56 | 72 | ucx_memclose(m); |
universe@56 | 73 | free(buffer); |
universe@56 | 74 | } |
universe@56 | 75 | |
universe@56 | 76 | UCX_TEST_IMPLEMENT(test_ucx_memgetc) { |
universe@56 | 77 | char *buffer = malloc(16); |
universe@56 | 78 | memset(buffer, 32, 8); |
universe@56 | 79 | for (int i = 8; i < 16 ; i++) { |
universe@56 | 80 | buffer[i] = 40+i; |
universe@56 | 81 | } |
universe@56 | 82 | |
universe@56 | 83 | UcxMemstream *m = ucx_memopen(buffer, 16); |
universe@56 | 84 | int r; |
universe@56 | 85 | |
universe@56 | 86 | UCX_TEST_BEGIN |
universe@56 | 87 | |
universe@56 | 88 | char rb[16]; |
universe@56 | 89 | for (int i = 0 ; i < 16 ; i++) { |
universe@56 | 90 | UCX_TEST_ASSERT(ucx_memtell(m) == i, "pos wrong during read loop"); |
universe@56 | 91 | UCX_TEST_ASSERT(!ucx_memeof(m), |
universe@56 | 92 | "EOF shall not be set during read loop"); |
universe@56 | 93 | rb[i] = ucx_memgetc(m); |
universe@56 | 94 | } |
universe@56 | 95 | UCX_TEST_ASSERT(ucx_memtell(m) == 16, "pos wrong after read loop"); |
universe@56 | 96 | UCX_TEST_ASSERT(ucx_memeof(m), "EOF not set"); |
universe@56 | 97 | UCX_TEST_ASSERT(memcmp(rb, " 01234567", 16) == 0, |
universe@56 | 98 | "read data incorrect"); |
universe@56 | 99 | |
universe@56 | 100 | UCX_TEST_END |
universe@56 | 101 | |
universe@56 | 102 | ucx_memclose(m); |
universe@56 | 103 | free(buffer); |
universe@56 | 104 | } |
universe@56 | 105 | |
universe@56 | 106 | UCX_TEST_IMPLEMENT(test_ucx_memwrite) { |
universe@56 | 107 | char *buffer = malloc(16); |
universe@56 | 108 | memset(buffer, 32, 8); |
universe@56 | 109 | for (int i = 8; i < 16 ; i++) { |
universe@56 | 110 | buffer[i] = 40+i; |
universe@56 | 111 | } |
universe@56 | 112 | |
universe@56 | 113 | UcxMemstream *m = ucx_memopen(buffer, 16); |
universe@56 | 114 | int r; |
universe@56 | 115 | |
universe@56 | 116 | UCX_TEST_BEGIN |
universe@56 | 117 | |
universe@56 | 118 | char* teststring = "this is way too much"; |
universe@56 | 119 | r = ucx_memwrite(teststring, 1, 20, m); |
universe@56 | 120 | UCX_TEST_ASSERT(r == 16, "string not correctly trimed"); |
universe@56 | 121 | UCX_TEST_ASSERT(memcmp(buffer, teststring, 16) == 0, |
universe@56 | 122 | "buffer data incorrect"); |
universe@56 | 123 | UCX_TEST_ASSERT(ucx_memeof(m), "eof shall be set"); |
universe@56 | 124 | UCX_TEST_ASSERT(!ucx_memoverflow(m), "no overflow shall be caused"); |
universe@56 | 125 | |
universe@56 | 126 | ucx_memseek(m, 8, SEEK_SET); |
universe@56 | 127 | r = ucx_memwrite("not", 1, 3, m); |
universe@56 | 128 | UCX_TEST_ASSERT(r == 3, "three bytes should be replace"); |
universe@56 | 129 | UCX_TEST_ASSERT(memcmp(buffer, "this is not too much", 16) == 0, |
universe@56 | 130 | "modified buffer is incorrect"); |
universe@56 | 131 | |
universe@56 | 132 | char* threebytestring = " t h r e e "; |
universe@56 | 133 | memset(buffer, 49, 16); |
universe@56 | 134 | ucx_memseek(m, 0, SEEK_SET); |
universe@56 | 135 | r = ucx_memwrite(threebytestring, 3, 6, m); |
universe@56 | 136 | UCX_TEST_ASSERT(r == 15, "three byte string not correctly trimed"); |
universe@56 | 137 | UCX_TEST_ASSERT(ucx_memtell(m) == 15, |
universe@56 | 138 | "position after write of three byte string incorrect"); |
universe@56 | 139 | UCX_TEST_ASSERT(!ucx_memeof(m), "eof shall not be set"); |
universe@56 | 140 | UCX_TEST_ASSERT(memcmp(buffer, " t h r e e1", 16) == 0, |
universe@56 | 141 | "bufer is incorrect after three byte string has been written"); |
universe@56 | 142 | |
universe@56 | 143 | UCX_TEST_END |
universe@56 | 144 | |
universe@56 | 145 | ucx_memclose(m); |
universe@56 | 146 | free(buffer); |
universe@56 | 147 | } |
universe@56 | 148 | |
universe@56 | 149 | UCX_TEST_IMPLEMENT(test_ucx_memread) { |
universe@56 | 150 | char *buffer = malloc(16); |
universe@56 | 151 | memset(buffer, 56, 8); |
universe@56 | 152 | for (int i = 8; i < 16 ; i++) { |
universe@56 | 153 | buffer[i] = 40+i; |
universe@56 | 154 | } |
universe@56 | 155 | |
universe@56 | 156 | UcxMemstream *m = ucx_memopen(buffer, 16); |
universe@56 | 157 | int r; |
universe@56 | 158 | |
universe@56 | 159 | UCX_TEST_BEGIN |
universe@56 | 160 | |
universe@56 | 161 | char rb[16]; |
universe@56 | 162 | memset(rb, 32, 16); |
universe@56 | 163 | |
universe@56 | 164 | ucx_memseek(m, 8, SEEK_SET); |
universe@56 | 165 | r = ucx_memread(rb, 1, 16, m); |
universe@56 | 166 | UCX_TEST_ASSERT(r == 8, "read did not stop at buffer end"); |
universe@56 | 167 | UCX_TEST_ASSERT(memcmp(rb, "01234567 ", 16) == 0, |
universe@56 | 168 | "buffer incorrect after first read"); |
universe@56 | 169 | UCX_TEST_ASSERT(ucx_memeof(m), "eof shall be set"); |
universe@56 | 170 | |
universe@56 | 171 | ucx_memseek(m, 0, SEEK_SET); |
universe@56 | 172 | r = ucx_memread(rb+8, 1, 8, m); |
universe@56 | 173 | UCX_TEST_ASSERT(r == 8, "read did not read the specified amount of bytes"); |
universe@56 | 174 | UCX_TEST_ASSERT(memcmp(rb, "0123456788888888", 16) == 0, |
universe@56 | 175 | "buffer incorrect after second read"); |
universe@56 | 176 | |
universe@56 | 177 | ucx_memseek(m, 0, SEEK_SET); |
universe@56 | 178 | r = ucx_memread(rb, 3, 6, m); |
universe@56 | 179 | UCX_TEST_ASSERT(r == 15, |
universe@56 | 180 | "three byte read did not read the desired amount of bytes"); |
universe@56 | 181 | UCX_TEST_ASSERT(memcmp(rb, "8888888801234568", 16) == 0, |
universe@56 | 182 | "buffer incorrect after three byte read"); |
universe@56 | 183 | |
universe@56 | 184 | UCX_TEST_END |
universe@56 | 185 | |
universe@56 | 186 | ucx_memclose(m); |
universe@56 | 187 | free(buffer); |
universe@56 | 188 | } |
universe@56 | 189 | |
universe@56 | 190 | UCX_TEST_IMPLEMENT(test_ucx_memprintf) { |
universe@56 | 191 | char *buffer = malloc(32); |
universe@56 | 192 | UcxMemstream *m = ucx_memopen(buffer, 16); |
universe@56 | 193 | |
universe@56 | 194 | UCX_TEST_BEGIN |
universe@56 | 195 | int r = ucx_memprintf(m, "number: %d char: %c", 15, '6'); |
universe@56 | 196 | UCX_TEST_ASSERT(r == 18, "incorrect number of bytes written"); |
universe@56 | 197 | UCX_TEST_ASSERT(ucx_memoverflow(m), "overflow shall be detected"); |
universe@56 | 198 | UCX_TEST_ASSERT(memcmp(buffer, "number: 15 char:", 16) == 0, |
universe@56 | 199 | "incorrect buffer content"); |
universe@56 | 200 | |
universe@56 | 201 | ucx_memseek(m, 0, SEEK_SET); |
universe@56 | 202 | ucx_memprintf(m, "a: %d - b: %d", 1, 2); |
universe@56 | 203 | UCX_TEST_ASSERT(!ucx_memoverflow(m), "no overflow shall be deteceted"); |
universe@56 | 204 | UCX_TEST_ASSERT(memcmp(buffer, "a: 1 - b: 2char:", 16), |
universe@56 | 205 | "incorrect modified buffer content"); |
universe@56 | 206 | UCX_TEST_ASSERT(ucx_memtell(m) == 11, "incorrect position"); |
universe@56 | 207 | |
universe@56 | 208 | UCX_TEST_END |
universe@56 | 209 | |
universe@56 | 210 | ucx_memclose(m); |
universe@56 | 211 | free(buffer); |
universe@56 | 212 | } |
universe@56 | 213 | |
universe@56 | 214 | UCX_TEST_IMPLEMENT(test_ucx_memscanf) { |
universe@56 | 215 | char *buffer = "string 3.5 1 stuff"; |
universe@56 | 216 | UcxMemstream *m = ucx_memopen(buffer, 16); |
universe@56 | 217 | |
universe@56 | 218 | char s[6]; |
universe@56 | 219 | float f; |
universe@56 | 220 | int d; |
universe@56 | 221 | UCX_TEST_BEGIN |
universe@56 | 222 | int r = ucx_memscanf(m, "%s %f %d", s, &f, &d); |
universe@56 | 223 | UCX_TEST_ASSERT(r == 3, "3 arguments shall be read"); |
universe@56 | 224 | UCX_TEST_ASSERT(strncmp(s, "string", 6) == 0, "incorrect string"); |
universe@56 | 225 | UCX_TEST_ASSERT(f == 3.5, "incorrect float"); |
universe@56 | 226 | UCX_TEST_ASSERT(d == 1, "incorrect integer"); |
universe@56 | 227 | UCX_TEST_ASSERT(ucx_memtell(m) == 12, "incorrect position"); |
universe@56 | 228 | UCX_TEST_END |
universe@56 | 229 | |
universe@56 | 230 | ucx_memclose(m); |
universe@56 | 231 | } |