test/memstream_tests.c

Wed, 10 Oct 2012 09:32:06 +0200

author
Mike Becker <universe@uap-core.de>
date
Wed, 10 Oct 2012 09:32:06 +0200
changeset 58
733f22fca61a
parent 56
76caac0da4a0
permissions
-rw-r--r--

discarded memprintf / memscanf

Reason: memscanf has no chance to get the amount of bytes read

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_memputc(m, 48) == EOF, "put shall return EOF on memof");
universe@56 66 UCX_TEST_ASSERT(memcmp(buffer, "000 000", 16) == 0,
universe@56 67 "buffer contains incorrect content");
universe@56 68
universe@56 69 UCX_TEST_END
universe@56 70
universe@56 71 ucx_memclose(m);
universe@56 72 free(buffer);
universe@56 73 }
universe@56 74
universe@56 75 UCX_TEST_IMPLEMENT(test_ucx_memgetc) {
universe@56 76 char *buffer = malloc(16);
universe@56 77 memset(buffer, 32, 8);
universe@56 78 for (int i = 8; i < 16 ; i++) {
universe@56 79 buffer[i] = 40+i;
universe@56 80 }
universe@56 81
universe@56 82 UcxMemstream *m = ucx_memopen(buffer, 16);
universe@56 83 int r;
universe@56 84
universe@56 85 UCX_TEST_BEGIN
universe@56 86
universe@56 87 char rb[16];
universe@56 88 for (int i = 0 ; i < 16 ; i++) {
universe@56 89 UCX_TEST_ASSERT(ucx_memtell(m) == i, "pos wrong during read loop");
universe@56 90 UCX_TEST_ASSERT(!ucx_memeof(m),
universe@56 91 "EOF shall not be set during read loop");
universe@56 92 rb[i] = ucx_memgetc(m);
universe@56 93 }
universe@56 94 UCX_TEST_ASSERT(ucx_memtell(m) == 16, "pos wrong after read loop");
universe@56 95 UCX_TEST_ASSERT(ucx_memeof(m), "EOF not set");
universe@56 96 UCX_TEST_ASSERT(memcmp(rb, " 01234567", 16) == 0,
universe@56 97 "read data incorrect");
universe@56 98
universe@56 99 UCX_TEST_END
universe@56 100
universe@56 101 ucx_memclose(m);
universe@56 102 free(buffer);
universe@56 103 }
universe@56 104
universe@56 105 UCX_TEST_IMPLEMENT(test_ucx_memwrite) {
universe@56 106 char *buffer = malloc(16);
universe@56 107 memset(buffer, 32, 8);
universe@56 108 for (int i = 8; i < 16 ; i++) {
universe@56 109 buffer[i] = 40+i;
universe@56 110 }
universe@56 111
universe@56 112 UcxMemstream *m = ucx_memopen(buffer, 16);
universe@56 113 int r;
universe@56 114
universe@56 115 UCX_TEST_BEGIN
universe@56 116
universe@56 117 char* teststring = "this is way too much";
universe@56 118 r = ucx_memwrite(teststring, 1, 20, m);
universe@56 119 UCX_TEST_ASSERT(r == 16, "string not correctly trimed");
universe@56 120 UCX_TEST_ASSERT(memcmp(buffer, teststring, 16) == 0,
universe@56 121 "buffer data incorrect");
universe@56 122 UCX_TEST_ASSERT(ucx_memeof(m), "eof shall be set");
universe@56 123
universe@56 124 ucx_memseek(m, 8, SEEK_SET);
universe@56 125 r = ucx_memwrite("not", 1, 3, m);
universe@56 126 UCX_TEST_ASSERT(r == 3, "three bytes should be replace");
universe@56 127 UCX_TEST_ASSERT(memcmp(buffer, "this is not too much", 16) == 0,
universe@56 128 "modified buffer is incorrect");
universe@56 129
universe@56 130 char* threebytestring = " t h r e e ";
universe@56 131 memset(buffer, 49, 16);
universe@56 132 ucx_memseek(m, 0, SEEK_SET);
universe@56 133 r = ucx_memwrite(threebytestring, 3, 6, m);
universe@56 134 UCX_TEST_ASSERT(r == 15, "three byte string not correctly trimed");
universe@56 135 UCX_TEST_ASSERT(ucx_memtell(m) == 15,
universe@56 136 "position after write of three byte string incorrect");
universe@56 137 UCX_TEST_ASSERT(!ucx_memeof(m), "eof shall not be set");
universe@56 138 UCX_TEST_ASSERT(memcmp(buffer, " t h r e e1", 16) == 0,
universe@56 139 "bufer is incorrect after three byte string has been written");
universe@56 140
universe@56 141 UCX_TEST_END
universe@56 142
universe@56 143 ucx_memclose(m);
universe@56 144 free(buffer);
universe@56 145 }
universe@56 146
universe@56 147 UCX_TEST_IMPLEMENT(test_ucx_memread) {
universe@56 148 char *buffer = malloc(16);
universe@56 149 memset(buffer, 56, 8);
universe@56 150 for (int i = 8; i < 16 ; i++) {
universe@56 151 buffer[i] = 40+i;
universe@56 152 }
universe@56 153
universe@56 154 UcxMemstream *m = ucx_memopen(buffer, 16);
universe@56 155 int r;
universe@56 156
universe@56 157 UCX_TEST_BEGIN
universe@56 158
universe@56 159 char rb[16];
universe@56 160 memset(rb, 32, 16);
universe@56 161
universe@56 162 ucx_memseek(m, 8, SEEK_SET);
universe@56 163 r = ucx_memread(rb, 1, 16, m);
universe@56 164 UCX_TEST_ASSERT(r == 8, "read did not stop at buffer end");
universe@56 165 UCX_TEST_ASSERT(memcmp(rb, "01234567 ", 16) == 0,
universe@56 166 "buffer incorrect after first read");
universe@56 167 UCX_TEST_ASSERT(ucx_memeof(m), "eof shall be set");
universe@56 168
universe@56 169 ucx_memseek(m, 0, SEEK_SET);
universe@56 170 r = ucx_memread(rb+8, 1, 8, m);
universe@56 171 UCX_TEST_ASSERT(r == 8, "read did not read the specified amount of bytes");
universe@56 172 UCX_TEST_ASSERT(memcmp(rb, "0123456788888888", 16) == 0,
universe@56 173 "buffer incorrect after second read");
universe@56 174
universe@56 175 ucx_memseek(m, 0, SEEK_SET);
universe@56 176 r = ucx_memread(rb, 3, 6, m);
universe@56 177 UCX_TEST_ASSERT(r == 15,
universe@56 178 "three byte read did not read the desired amount of bytes");
universe@56 179 UCX_TEST_ASSERT(memcmp(rb, "8888888801234568", 16) == 0,
universe@56 180 "buffer incorrect after three byte read");
universe@56 181
universe@56 182 UCX_TEST_END
universe@56 183
universe@56 184 ucx_memclose(m);
universe@56 185 free(buffer);
universe@56 186 }

mercurial