Wed, 10 Oct 2012 09:54:57 +0200
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 | } |