test/memstream_tests.c

Tue, 09 Oct 2012 15:02:40 +0200

author
Mike Becker <universe@uap-core.de>
date
Tue, 09 Oct 2012 15:02:40 +0200
changeset 56
76caac0da4a0
child 58
733f22fca61a
permissions
-rw-r--r--

added memstream to ucx - still little work to do

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 }

mercurial