test/buffer_tests.c

Wed, 10 Oct 2012 09:54:57 +0200

author
Mike Becker <universe@uap-core.de>
date
Wed, 10 Oct 2012 09:54:57 +0200
changeset 60
abae4669fba7
parent 58
test/memstream_tests.c@733f22fca61a
child 61
fb07a0ab9a17
permissions
-rw-r--r--

renamed UcxMemstream to UcxBuffer

universe@56 1 /*
universe@56 2 *
universe@56 3 */
universe@56 4
universe@60 5 #include "buffer_tests.h"
universe@56 6
universe@60 7 UCX_TEST_IMPLEMENT(test_ucx_buffer_seektell) {
universe@56 8 char *buffer = malloc(16);
universe@56 9 memset(buffer, 32, 7);
universe@56 10 buffer[7] = 0;
universe@56 11
universe@60 12 UcxBuffer *b = ucx_buffer_new(buffer, 16);
universe@56 13 int r;
universe@56 14
universe@56 15 UCX_TEST_BEGIN
universe@56 16
universe@60 17 r = ucx_buffer_seek(b, 5, SEEK_SET);
universe@56 18 UCX_TEST_ASSERT(r == 0, "seek SET+5 failed");
universe@60 19 UCX_TEST_ASSERT(ucx_buffer_tell(b) == 5, "seek SET+5 set wrong position");
universe@56 20
universe@60 21 r = ucx_buffer_seek(b, 20, SEEK_SET);
universe@56 22 UCX_TEST_ASSERT(r != 0, "seek beyond bounds shall fail");
universe@60 23 UCX_TEST_ASSERT(ucx_buffer_tell(b) == 5,
universe@56 24 "failed seek shall leave pos unchanged");
universe@56 25
universe@60 26 r = ucx_buffer_seek(b, 5, SEEK_CUR);
universe@56 27 UCX_TEST_ASSERT(r == 0, "seek CUR+5 failed");
universe@60 28 UCX_TEST_ASSERT(ucx_buffer_tell(b) == 10, "seek CUR+5 set wrong position");
universe@56 29
universe@60 30 r = ucx_buffer_seek(b, 10, SEEK_CUR);
universe@56 31 UCX_TEST_ASSERT(r != 0, "seek CUR beyond bounds shall fail");
universe@60 32 UCX_TEST_ASSERT(ucx_buffer_tell(b) == 10,
universe@56 33 "failed seek shall leave pos unchanged");
universe@56 34
universe@60 35 r = ucx_buffer_seek(b, -5, SEEK_END);
universe@56 36 UCX_TEST_ASSERT(r == 0, "seek END-5 failed");
universe@60 37 UCX_TEST_ASSERT(ucx_buffer_tell(b) == 2, "seek END-5 set wrong position");
universe@56 38
universe@60 39 r = ucx_buffer_seek(b, -10, SEEK_END);
universe@56 40 UCX_TEST_ASSERT(r != 0, "seek END beyond bounds shall fail");
universe@60 41 UCX_TEST_ASSERT(ucx_buffer_tell(b) == 2,
universe@56 42 "failed seek shall leave pos unchanged");
universe@56 43
universe@56 44 UCX_TEST_END
universe@56 45
universe@60 46 ucx_buffer_free(b);
universe@56 47 free(buffer);
universe@56 48 }
universe@56 49
universe@60 50 UCX_TEST_IMPLEMENT(test_ucx_buffer_putc) {
universe@56 51 char *buffer = malloc(16);
universe@56 52 memset(buffer, 32, 16);
universe@56 53
universe@60 54 UcxBuffer *b = ucx_buffer_new(buffer, 16);
universe@56 55 int r;
universe@56 56
universe@56 57 UCX_TEST_BEGIN
universe@56 58
universe@60 59 ucx_buffer_putc(b, 48); ucx_buffer_putc(b, 48); ucx_buffer_putc(b, 48);
universe@60 60 UCX_TEST_ASSERT(ucx_buffer_tell(b) == 3, "pos wrong after first 3 puts");
universe@60 61 ucx_buffer_seek(b, 10, SEEK_CUR);
universe@60 62 ucx_buffer_putc(b, 48); ucx_buffer_putc(b, 48); ucx_buffer_putc(b, 48);
universe@60 63 UCX_TEST_ASSERT(ucx_buffer_tell(b) == 16, "pos wrong after last 3 puts");
universe@60 64 UCX_TEST_ASSERT(ucx_buffer_eof(b), "eof not set");
universe@60 65 UCX_TEST_ASSERT(ucx_buffer_putc(b, 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@60 71 ucx_buffer_free(b);
universe@56 72 free(buffer);
universe@56 73 }
universe@56 74
universe@60 75 UCX_TEST_IMPLEMENT(test_ucx_buffer_getc) {
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@60 82 UcxBuffer *b = ucx_buffer_new(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@60 89 UCX_TEST_ASSERT(ucx_buffer_tell(b) == i, "pos wrong during read loop");
universe@60 90 UCX_TEST_ASSERT(!ucx_buffer_eof(b),
universe@56 91 "EOF shall not be set during read loop");
universe@60 92 rb[i] = ucx_buffer_getc(b);
universe@56 93 }
universe@60 94 UCX_TEST_ASSERT(ucx_buffer_tell(b) == 16, "pos wrong after read loop");
universe@60 95 UCX_TEST_ASSERT(ucx_buffer_eof(b), "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@60 101 ucx_buffer_free(b);
universe@56 102 free(buffer);
universe@56 103 }
universe@56 104
universe@60 105 UCX_TEST_IMPLEMENT(test_ucx_buffer_write) {
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@60 112 UcxBuffer *b = ucx_buffer_new(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@60 118 r = ucx_buffer_write(teststring, 1, 20, b);
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@60 122 UCX_TEST_ASSERT(ucx_buffer_eof(b), "eof shall be set");
universe@56 123
universe@60 124 ucx_buffer_seek(b, 8, SEEK_SET);
universe@60 125 r = ucx_buffer_write("not", 1, 3, b);
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@60 132 ucx_buffer_seek(b, 0, SEEK_SET);
universe@60 133 r = ucx_buffer_write(threebytestring, 3, 6, b);
universe@56 134 UCX_TEST_ASSERT(r == 15, "three byte string not correctly trimed");
universe@60 135 UCX_TEST_ASSERT(ucx_buffer_tell(b) == 15,
universe@56 136 "position after write of three byte string incorrect");
universe@60 137 UCX_TEST_ASSERT(!ucx_buffer_eof(b), "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@60 143 ucx_buffer_free(b);
universe@56 144 free(buffer);
universe@56 145 }
universe@56 146
universe@60 147 UCX_TEST_IMPLEMENT(test_ucx_buffer_read) {
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@60 154 UcxBuffer *b = ucx_buffer_new(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@60 162 ucx_buffer_seek(b, 8, SEEK_SET);
universe@60 163 r = ucx_buffer_read(rb, 1, 16, b);
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@60 167 UCX_TEST_ASSERT(ucx_buffer_eof(b), "eof shall be set");
universe@56 168
universe@60 169 ucx_buffer_seek(b, 0, SEEK_SET);
universe@60 170 r = ucx_buffer_read(rb+8, 1, 8, b);
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@60 175 ucx_buffer_seek(b, 0, SEEK_SET);
universe@60 176 r = ucx_buffer_read(rb, 3, 6, b);
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@60 184 ucx_buffer_free(b);
universe@56 185 free(buffer);
universe@56 186 }

mercurial