tests/test_buffer.c

Thu, 04 Jan 2024 21:05:32 +0100

author
Mike Becker <universe@uap-core.de>
date
Thu, 04 Jan 2024 21:05:32 +0100
changeset 793
db1c8dfe403a
parent 792
3ca984931e1d
permissions
-rw-r--r--

migrate remaining buffer tests - relates to #342

universe@789 1 /*
universe@789 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
universe@789 3 *
universe@789 4 * Copyright 2023 Mike Becker, Olaf Wintermann All rights reserved.
universe@789 5 *
universe@789 6 * Redistribution and use in source and binary forms, with or without
universe@789 7 * modification, are permitted provided that the following conditions are met:
universe@789 8 *
universe@789 9 * 1. Redistributions of source code must retain the above copyright
universe@789 10 * notice, this list of conditions and the following disclaimer.
universe@789 11 *
universe@789 12 * 2. Redistributions in binary form must reproduce the above copyright
universe@789 13 * notice, this list of conditions and the following disclaimer in the
universe@789 14 * documentation and/or other materials provided with the distribution.
universe@789 15 *
universe@789 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
universe@789 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
universe@789 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
universe@789 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
universe@789 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
universe@789 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
universe@789 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
universe@789 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
universe@789 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
universe@789 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
universe@789 26 * POSSIBILITY OF SUCH DAMAGE.
universe@789 27 */
universe@789 28
universe@789 29 #include "cx/test.h"
universe@789 30 #include "util_allocator.h"
universe@789 31
universe@789 32 #include "cx/buffer.h"
universe@789 33
universe@789 34 static CX_TEST_SUBROUTINE(expect_default_flush_config, CxBuffer *buf) {
universe@789 35 CX_TEST_ASSERT(buf->flush_blkmax == 0);
universe@789 36 CX_TEST_ASSERT(buf->flush_blksize == 4096);
universe@789 37 CX_TEST_ASSERT(buf->flush_threshold == SIZE_MAX);
universe@789 38 CX_TEST_ASSERT(buf->flush_func == NULL);
universe@789 39 CX_TEST_ASSERT(buf->flush_target == NULL);
universe@789 40 }
universe@789 41
universe@789 42 CX_TEST(test_buffer_init_wrap_space) {
universe@789 43 CxTestingAllocator talloc;
universe@789 44 cx_testing_allocator_init(&talloc);
universe@789 45 CxAllocator *alloc = &talloc.base;
universe@789 46 CX_TEST_DO {
universe@789 47 CxBuffer buf;
universe@789 48 void *space = cxMalloc(alloc, 16);
universe@789 49 cxBufferInit(&buf, space, 16, alloc, CX_BUFFER_DEFAULT);
universe@789 50 CX_TEST_CALL_SUBROUTINE(expect_default_flush_config, &buf);
universe@789 51 CX_TEST_ASSERT(buf.space == space);
universe@789 52 CX_TEST_ASSERT((buf.flags & CX_BUFFER_AUTO_EXTEND) == 0);
universe@789 53 CX_TEST_ASSERT((buf.flags & CX_BUFFER_FREE_CONTENTS) == 0);
universe@789 54 CX_TEST_ASSERT(buf.pos == 0);
universe@789 55 CX_TEST_ASSERT(buf.size == 0);
universe@789 56 CX_TEST_ASSERT(buf.capacity == 16);
universe@789 57 CX_TEST_ASSERT(buf.allocator == alloc);
universe@789 58 cxBufferDestroy(&buf);
universe@789 59 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
universe@789 60 cxFree(alloc, space);
universe@789 61 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
universe@789 62 }
universe@789 63 cx_testing_allocator_destroy(&talloc);
universe@789 64 }
universe@789 65
universe@789 66 CX_TEST(test_buffer_init_wrap_space_auto_extend) {
universe@789 67 CxTestingAllocator talloc;
universe@789 68 cx_testing_allocator_init(&talloc);
universe@789 69 CxAllocator *alloc = &talloc.base;
universe@789 70 CX_TEST_DO {
universe@789 71 CxBuffer buf;
universe@789 72 void *space = cxMalloc(alloc, 16);
universe@789 73 cxBufferInit(&buf, space, 16, alloc, CX_BUFFER_AUTO_EXTEND);
universe@789 74 CX_TEST_CALL_SUBROUTINE(expect_default_flush_config, &buf);
universe@789 75 CX_TEST_ASSERT(buf.space == space);
universe@789 76 CX_TEST_ASSERT((buf.flags & CX_BUFFER_AUTO_EXTEND) == CX_BUFFER_AUTO_EXTEND);
universe@789 77 CX_TEST_ASSERT((buf.flags & CX_BUFFER_FREE_CONTENTS) == 0);
universe@789 78 CX_TEST_ASSERT(buf.pos == 0);
universe@789 79 CX_TEST_ASSERT(buf.size == 0);
universe@789 80 CX_TEST_ASSERT(buf.capacity == 16);
universe@789 81 CX_TEST_ASSERT(buf.allocator == alloc);
universe@789 82 cxBufferDestroy(&buf);
universe@789 83 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
universe@789 84 cxFree(alloc, space);
universe@789 85 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
universe@789 86 }
universe@789 87 cx_testing_allocator_destroy(&talloc);
universe@789 88 }
universe@789 89
universe@789 90 CX_TEST(test_buffer_init_wrap_space_auto_free) {
universe@789 91 CxTestingAllocator talloc;
universe@789 92 cx_testing_allocator_init(&talloc);
universe@789 93 CxAllocator *alloc = &talloc.base;
universe@789 94 CX_TEST_DO {
universe@789 95 CxBuffer buf;
universe@789 96 void *space = cxMalloc(alloc, 16);
universe@789 97 cxBufferInit(&buf, space, 16, alloc, CX_BUFFER_FREE_CONTENTS);
universe@789 98 CX_TEST_CALL_SUBROUTINE(expect_default_flush_config, &buf);
universe@789 99 CX_TEST_ASSERT(buf.space == space);
universe@789 100 CX_TEST_ASSERT((buf.flags & CX_BUFFER_AUTO_EXTEND) == 0);
universe@789 101 CX_TEST_ASSERT((buf.flags & CX_BUFFER_FREE_CONTENTS) == CX_BUFFER_FREE_CONTENTS);
universe@789 102 CX_TEST_ASSERT(buf.pos == 0);
universe@789 103 CX_TEST_ASSERT(buf.size == 0);
universe@789 104 CX_TEST_ASSERT(buf.capacity == 16);
universe@789 105 CX_TEST_ASSERT(buf.allocator == alloc);
universe@789 106 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc));
universe@789 107 cxBufferDestroy(&buf);
universe@789 108 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
universe@789 109 }
universe@789 110 cx_testing_allocator_destroy(&talloc);
universe@789 111 }
universe@789 112
universe@789 113 CX_TEST(test_buffer_init_fresh_space) {
universe@789 114 CxTestingAllocator talloc;
universe@789 115 cx_testing_allocator_init(&talloc);
universe@789 116 CxAllocator *alloc = &talloc.base;
universe@789 117 CX_TEST_DO {
universe@789 118 CxBuffer buf;
universe@789 119 cxBufferInit(&buf, NULL, 8, alloc, CX_BUFFER_DEFAULT);
universe@789 120 CX_TEST_CALL_SUBROUTINE(expect_default_flush_config, &buf);
universe@789 121 CX_TEST_ASSERT(buf.space != NULL);
universe@789 122 CX_TEST_ASSERT((buf.flags & CX_BUFFER_AUTO_EXTEND) == 0);
universe@789 123 CX_TEST_ASSERT((buf.flags & CX_BUFFER_FREE_CONTENTS) == CX_BUFFER_FREE_CONTENTS);
universe@789 124 CX_TEST_ASSERT(buf.pos == 0);
universe@789 125 CX_TEST_ASSERT(buf.size == 0);
universe@789 126 CX_TEST_ASSERT(buf.capacity == 8);
universe@789 127 CX_TEST_ASSERT(buf.allocator == alloc);
universe@789 128 CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); // space is still allocated
universe@789 129 cxBufferDestroy(&buf);
universe@789 130 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
universe@789 131 }
universe@789 132 cx_testing_allocator_destroy(&talloc);
universe@789 133 }
universe@789 134
universe@789 135 CX_TEST(test_buffer_init_on_heap) {
universe@789 136 CxTestingAllocator talloc;
universe@789 137 cx_testing_allocator_init(&talloc);
universe@789 138 CxAllocator *alloc = &talloc.base;
universe@789 139 CX_TEST_DO {
universe@789 140 CxBuffer *buf;
universe@789 141 void *space = cxMalloc(alloc, 16);
universe@789 142 buf = cxBufferCreate(space, 16, alloc, CX_BUFFER_FREE_CONTENTS);
universe@789 143 CX_TEST_ASSERT(buf != NULL);
universe@789 144 CX_TEST_CALL_SUBROUTINE(expect_default_flush_config, buf);
universe@789 145 CX_TEST_ASSERT(buf->space == space);
universe@789 146 CX_TEST_ASSERT((buf->flags & CX_BUFFER_AUTO_EXTEND) == 0);
universe@789 147 CX_TEST_ASSERT((buf->flags & CX_BUFFER_FREE_CONTENTS) == CX_BUFFER_FREE_CONTENTS);
universe@789 148 CX_TEST_ASSERT(buf->pos == 0);
universe@789 149 CX_TEST_ASSERT(buf->size == 0);
universe@789 150 CX_TEST_ASSERT(buf->capacity == 16);
universe@789 151 CX_TEST_ASSERT(buf->allocator == alloc);
universe@789 152 cxBufferFree(buf);
universe@789 153 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
universe@789 154 }
universe@789 155 cx_testing_allocator_destroy(&talloc);
universe@789 156 }
universe@789 157
universe@789 158 CX_TEST(test_buffer_minimum_capacity_sufficient) {
universe@789 159 CxTestingAllocator talloc;
universe@789 160 cx_testing_allocator_init(&talloc);
universe@789 161 CxAllocator *alloc = &talloc.base;
universe@789 162 CX_TEST_DO {
universe@789 163 void *space = cxMalloc(alloc, 8);
universe@789 164 CxBuffer buf;
universe@789 165 cxBufferInit(&buf, space, 8, alloc, CX_BUFFER_FREE_CONTENTS);
universe@789 166 memcpy(space, "Testing", 8);
universe@789 167 buf.size = 8;
universe@789 168 cxBufferMinimumCapacity(&buf, 6);
universe@789 169 CX_TEST_ASSERT(buf.capacity == 8);
universe@789 170 CX_TEST_ASSERT(buf.size == 8);
universe@789 171 CX_TEST_ASSERT(memcmp(buf.space, "Testing", 8) == 0);
universe@789 172 cxBufferDestroy(&buf);
universe@789 173 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
universe@789 174 }
universe@789 175 cx_testing_allocator_destroy(&talloc);
universe@789 176 }
universe@789 177
universe@789 178 CX_TEST(test_buffer_minimum_capacity_extend) {
universe@789 179 CxTestingAllocator talloc;
universe@789 180 cx_testing_allocator_init(&talloc);
universe@789 181 CxAllocator *alloc = &talloc.base;
universe@789 182 CX_TEST_DO {
universe@789 183 void *space = cxMalloc(alloc, 8);
universe@789 184 CxBuffer buf;
universe@789 185 cxBufferInit(&buf, space, 8, alloc, CX_BUFFER_FREE_CONTENTS); // NO auto extend!
universe@789 186 memcpy(space, "Testing", 8);
universe@789 187 buf.size = 8;
universe@789 188 cxBufferMinimumCapacity(&buf, 16);
universe@789 189 CX_TEST_ASSERT(buf.capacity == 16);
universe@789 190 CX_TEST_ASSERT(buf.size == 8);
universe@789 191 CX_TEST_ASSERT(memcmp(buf.space, "Testing", 8) == 0);
universe@789 192 cxBufferDestroy(&buf);
universe@789 193 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc));
universe@789 194 }
universe@789 195 cx_testing_allocator_destroy(&talloc);
universe@789 196 }
universe@789 197
universe@789 198 CX_TEST(test_buffer_clear) {
universe@789 199 char space[16];
universe@789 200 strcpy(space, "clear test");
universe@789 201 CxBuffer buf;
universe@789 202 cxBufferInit(&buf, space, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@789 203 CX_TEST_DO {
universe@789 204 CX_TEST_ASSERT(buf.size == 0);
universe@789 205 // only clear the used part of the buffer
universe@789 206 cxBufferClear(&buf);
universe@789 207 CX_TEST_ASSERT(0 == memcmp(space, "clear test", 10));
universe@789 208 buf.size = 5;
universe@789 209 buf.pos = 3;
universe@789 210 cxBufferClear(&buf);
universe@789 211 CX_TEST_ASSERT(0 == memcmp(space, "\0\0\0\0\0 test", 10));
universe@789 212 CX_TEST_ASSERT(buf.size == 0);
universe@789 213 CX_TEST_ASSERT(buf.pos == 0);
universe@789 214 }
universe@789 215 cxBufferDestroy(&buf);
universe@789 216 }
universe@789 217
universe@789 218 CX_TEST(test_buffer_reset) {
universe@789 219 char space[16];
universe@789 220 strcpy(space, "reset test");
universe@789 221 CxBuffer buf;
universe@789 222 cxBufferInit(&buf, space, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@789 223 CX_TEST_DO {
universe@789 224 buf.size = 5;
universe@789 225 buf.pos = 3;
universe@789 226 cxBufferReset(&buf);
universe@789 227 CX_TEST_ASSERT(0 == memcmp(space, "reset test", 10));
universe@789 228 CX_TEST_ASSERT(buf.size == 0);
universe@789 229 CX_TEST_ASSERT(buf.pos == 0);
universe@789 230 }
universe@789 231 cxBufferDestroy(&buf);
universe@789 232 }
universe@789 233
universe@789 234 CX_TEST(test_buffer_seek_set_zero) {
universe@789 235 CxBuffer buf;
universe@789 236 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@789 237 buf.size = 6;
universe@789 238 buf.pos = 3;
universe@789 239 CX_TEST_DO {
universe@789 240 int result = cxBufferSeek(&buf, 0, SEEK_SET);
universe@789 241 CX_TEST_ASSERT(result == 0);
universe@789 242 CX_TEST_ASSERT(buf.pos == 0);
universe@789 243 }
universe@789 244 cxBufferDestroy(&buf);
universe@789 245 }
universe@789 246
universe@789 247 CX_TEST(test_buffer_seek_set_valid) {
universe@789 248 CxBuffer buf;
universe@789 249 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@789 250 buf.size = 6;
universe@789 251 buf.pos = 3;
universe@789 252 CX_TEST_DO {
universe@789 253 int result = cxBufferSeek(&buf, 5, SEEK_SET);
universe@789 254 CX_TEST_ASSERT(result == 0);
universe@789 255 CX_TEST_ASSERT(buf.pos == 5);
universe@789 256 }
universe@789 257 cxBufferDestroy(&buf);
universe@789 258 }
universe@789 259
universe@789 260 CX_TEST(test_buffer_seek_set_invalid) {
universe@789 261 CxBuffer buf;
universe@789 262 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@789 263 buf.size = 6;
universe@789 264 buf.pos = 3;
universe@789 265 CX_TEST_DO {
universe@789 266 int result = cxBufferSeek(&buf, 6, SEEK_SET);
universe@789 267 CX_TEST_ASSERT(result != 0);
universe@789 268 CX_TEST_ASSERT(buf.pos == 3);
universe@789 269 }
universe@789 270 cxBufferDestroy(&buf);
universe@789 271 }
universe@789 272
universe@789 273 CX_TEST(test_buffer_seek_cur_zero) {
universe@789 274 CxBuffer buf;
universe@789 275 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@789 276 buf.size = 6;
universe@789 277 buf.pos = 3;
universe@789 278 CX_TEST_DO {
universe@789 279 int result = cxBufferSeek(&buf, 0, SEEK_CUR);
universe@789 280 CX_TEST_ASSERT(result == 0);
universe@789 281 CX_TEST_ASSERT(buf.pos == 3);
universe@789 282 }
universe@789 283 cxBufferDestroy(&buf);
universe@789 284 }
universe@789 285
universe@789 286 CX_TEST(test_buffer_seek_cur_valid_positive) {
universe@789 287 CxBuffer buf;
universe@789 288 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@789 289 buf.size = 6;
universe@789 290 buf.pos = 3;
universe@789 291 CX_TEST_DO {
universe@789 292 int result = cxBufferSeek(&buf, 2, SEEK_CUR);
universe@789 293 CX_TEST_ASSERT(result == 0);
universe@789 294 CX_TEST_ASSERT(buf.pos == 5);
universe@789 295 }
universe@789 296 cxBufferDestroy(&buf);
universe@789 297 }
universe@789 298
universe@789 299 CX_TEST(test_buffer_seek_cur_valid_negative) {
universe@789 300 CxBuffer buf;
universe@789 301 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@789 302 buf.size = 6;
universe@789 303 buf.pos = 3;
universe@789 304 CX_TEST_DO {
universe@789 305 int result = cxBufferSeek(&buf, -3, SEEK_CUR);
universe@789 306 CX_TEST_ASSERT(result == 0);
universe@789 307 CX_TEST_ASSERT(buf.pos == 0);
universe@789 308 }
universe@789 309 cxBufferDestroy(&buf);
universe@789 310 }
universe@789 311
universe@789 312 CX_TEST(test_buffer_seek_cur_invalid_positive) {
universe@789 313 CxBuffer buf;
universe@789 314 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@789 315 buf.size = 6;
universe@789 316 buf.pos = 3;
universe@789 317 CX_TEST_DO {
universe@789 318 int result = cxBufferSeek(&buf, 3, SEEK_CUR);
universe@789 319 CX_TEST_ASSERT(result != 0);
universe@789 320 CX_TEST_ASSERT(buf.pos == 3);
universe@789 321 }
universe@789 322 cxBufferDestroy(&buf);
universe@789 323 }
universe@789 324
universe@789 325 CX_TEST(test_buffer_seek_cur_invalid_negative) {
universe@789 326 CxBuffer buf;
universe@789 327 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@789 328 buf.size = 6;
universe@789 329 buf.pos = 3;
universe@789 330 CX_TEST_DO {
universe@789 331 int result = cxBufferSeek(&buf, -4, SEEK_CUR);
universe@789 332 CX_TEST_ASSERT(result != 0);
universe@789 333 CX_TEST_ASSERT(buf.pos == 3);
universe@789 334 }
universe@789 335 cxBufferDestroy(&buf);
universe@789 336 }
universe@789 337
universe@789 338 CX_TEST(test_buffer_seek_end_zero) {
universe@789 339 CxBuffer buf;
universe@789 340 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@789 341 buf.size = 6;
universe@789 342 buf.pos = 3;
universe@789 343 CX_TEST_DO {
universe@789 344 int result = cxBufferSeek(&buf, 0, SEEK_END);
universe@789 345 // the (past-the-)end position is always invalid
universe@789 346 CX_TEST_ASSERT(result != 0);
universe@789 347 CX_TEST_ASSERT(buf.pos == 3);
universe@789 348 }
universe@789 349 cxBufferDestroy(&buf);
universe@789 350 }
universe@789 351
universe@789 352 CX_TEST(test_buffer_seek_end_valid) {
universe@789 353 CxBuffer buf;
universe@789 354 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@789 355 buf.size = 6;
universe@789 356 buf.pos = 3;
universe@789 357 CX_TEST_DO {
universe@789 358 int result = cxBufferSeek(&buf, -6, SEEK_END);
universe@789 359 CX_TEST_ASSERT(result == 0);
universe@789 360 CX_TEST_ASSERT(buf.pos == 0);
universe@789 361 }
universe@789 362 cxBufferDestroy(&buf);
universe@789 363 }
universe@789 364
universe@789 365 CX_TEST(test_buffer_seek_end_invalid) {
universe@789 366 CxBuffer buf;
universe@789 367 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@789 368 buf.size = 6;
universe@789 369 buf.pos = 3;
universe@789 370 CX_TEST_DO {
universe@789 371 int result = cxBufferSeek(&buf, 1, SEEK_END);
universe@789 372 CX_TEST_ASSERT(result != 0);
universe@789 373 CX_TEST_ASSERT(buf.pos == 3);
universe@789 374 }
universe@789 375 cxBufferDestroy(&buf);
universe@789 376 }
universe@789 377
universe@789 378 CX_TEST(test_buffer_seek_whence_invalid) {
universe@789 379 CxBuffer buf;
universe@789 380 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@789 381 buf.size = 6;
universe@789 382 buf.pos = 3;
universe@789 383 CX_TEST_DO {
universe@789 384 int result = cxBufferSeek(&buf, 2, 9000);
universe@789 385 CX_TEST_ASSERT(result != 0);
universe@789 386 CX_TEST_ASSERT(buf.size == 6);
universe@789 387 CX_TEST_ASSERT(buf.pos == 3);
universe@789 388 }
universe@789 389 cxBufferDestroy(&buf);
universe@789 390 }
universe@789 391
universe@792 392 CX_TEST(test_buffer_eof_reached) {
universe@792 393 CxBuffer buf;
universe@792 394 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@792 395 buf.size = buf.pos = 3;
universe@792 396 CX_TEST_DO {
universe@792 397 CX_TEST_ASSERT(cxBufferEof(&buf));
universe@792 398 buf.pos = buf.size - 1;
universe@792 399 CX_TEST_ASSERT(!cxBufferEof(&buf));
universe@792 400 cxBufferPut(&buf, 'a');
universe@792 401 CX_TEST_ASSERT(cxBufferEof(&buf));
universe@792 402 }
universe@792 403 cxBufferDestroy(&buf);
universe@792 404 }
universe@792 405
universe@792 406 CX_TEST(test_buffer_eof_not_reached) {
universe@792 407 CxBuffer buf;
universe@792 408 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@792 409 buf.size = 6;
universe@792 410 CX_TEST_DO {
universe@792 411 buf.pos = buf.size - 1;
universe@792 412 CX_TEST_ASSERT(!cxBufferEof(&buf));
universe@792 413 buf.pos = 0;
universe@792 414 cxBufferWrite("test", 1, 5, &buf);
universe@792 415 CX_TEST_ASSERT(!cxBufferEof(&buf));
universe@792 416 }
universe@792 417 cxBufferDestroy(&buf);
universe@792 418 }
universe@792 419
universe@792 420 #define TEST_BUFFER_SHIFT_SETUP(buf) \
universe@792 421 CxTestingAllocator talloc; \
universe@792 422 cx_testing_allocator_init(&talloc); \
universe@792 423 CxAllocator *alloc = &talloc.base; \
universe@792 424 CxBuffer buf; \
universe@792 425 cxBufferInit(&buf, NULL, 16, alloc, CX_BUFFER_DEFAULT); \
universe@792 426 memcpy(buf.space, "test____XXXXXXXX", 16); \
universe@792 427 buf.capacity = 8; \
universe@792 428 buf.pos = 4; \
universe@792 429 buf.size = 4
universe@792 430 #define TEST_BUFFER_SHIFT_TEARDOWN(buf) \
universe@792 431 cxBufferDestroy(&buf); \
universe@792 432 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); \
universe@793 433 cx_testing_allocator_destroy(&talloc)
universe@792 434
universe@792 435
universe@792 436 CX_TEST(test_buffer_shift_left_zero) {
universe@792 437 TEST_BUFFER_SHIFT_SETUP(buf);
universe@792 438 CX_TEST_DO {
universe@792 439 int ret = cxBufferShiftLeft(&buf, 0);
universe@792 440 CX_TEST_ASSERT(ret == 0);
universe@792 441 CX_TEST_ASSERT(buf.pos == 4);
universe@792 442 CX_TEST_ASSERT(buf.size == 4);
universe@792 443 CX_TEST_ASSERT(memcmp(buf.space, "test____XXXXXXXX", 16) == 0);
universe@792 444 TEST_BUFFER_SHIFT_TEARDOWN(buf);
universe@792 445 }
universe@792 446 }
universe@792 447
universe@792 448 CX_TEST(test_buffer_shift_left_zero_offset_interface) {
universe@792 449 TEST_BUFFER_SHIFT_SETUP(buf);
universe@792 450 CX_TEST_DO {
universe@792 451 int ret = cxBufferShift(&buf, -0);
universe@792 452 CX_TEST_ASSERT(ret == 0);
universe@792 453 CX_TEST_ASSERT(buf.pos == 4);
universe@792 454 CX_TEST_ASSERT(buf.size == 4);
universe@792 455 CX_TEST_ASSERT(memcmp(buf.space, "test____XXXXXXXX", 16) == 0);
universe@792 456 TEST_BUFFER_SHIFT_TEARDOWN(buf);
universe@792 457 }
universe@792 458 }
universe@792 459
universe@792 460 CX_TEST(test_buffer_shift_left_standard) {
universe@792 461 TEST_BUFFER_SHIFT_SETUP(buf);
universe@792 462 CX_TEST_DO {
universe@792 463 int ret = cxBufferShiftLeft(&buf, 2);
universe@792 464 CX_TEST_ASSERT(ret == 0);
universe@792 465 CX_TEST_ASSERT(buf.pos == 2);
universe@792 466 CX_TEST_ASSERT(buf.size == 2);
universe@792 467 CX_TEST_ASSERT(memcmp(buf.space, "stst____XXXXXXXX", 16) == 0);
universe@792 468 TEST_BUFFER_SHIFT_TEARDOWN(buf);
universe@792 469 }
universe@792 470 }
universe@792 471
universe@792 472 CX_TEST(test_buffer_shift_left_overshift) {
universe@792 473 TEST_BUFFER_SHIFT_SETUP(buf);
universe@792 474 CX_TEST_DO {
universe@792 475 int ret = cxBufferShiftLeft(&buf, 6);
universe@792 476 CX_TEST_ASSERT(ret == 0);
universe@792 477 CX_TEST_ASSERT(buf.pos == 0);
universe@792 478 CX_TEST_ASSERT(buf.size == 0);
universe@792 479 CX_TEST_ASSERT(memcmp(buf.space, "test____XXXXXXXX", 16) == 0);
universe@792 480 TEST_BUFFER_SHIFT_TEARDOWN(buf);
universe@792 481 }
universe@792 482 }
universe@792 483
universe@792 484 CX_TEST(test_buffer_shift_left_overshift_pos_only) {
universe@792 485 TEST_BUFFER_SHIFT_SETUP(buf);
universe@792 486 buf.pos = 2;
universe@792 487 CX_TEST_DO {
universe@792 488 int ret = cxBufferShiftLeft(&buf, 3);
universe@792 489 CX_TEST_ASSERT(ret == 0);
universe@792 490 CX_TEST_ASSERT(buf.pos == 0);
universe@792 491 CX_TEST_ASSERT(buf.size == 1);
universe@792 492 CX_TEST_ASSERT(memcmp(buf.space, "test____XXXXXXXX", 16) == 0);
universe@792 493 TEST_BUFFER_SHIFT_TEARDOWN(buf);
universe@792 494 }
universe@792 495 }
universe@792 496
universe@792 497 CX_TEST(test_buffer_shift_left_offset_interface) {
universe@792 498 TEST_BUFFER_SHIFT_SETUP(buf);
universe@792 499 buf.pos = 3;
universe@792 500 CX_TEST_DO {
universe@792 501 int ret = cxBufferShift(&buf, -2);
universe@792 502 CX_TEST_ASSERT(ret == 0);
universe@792 503 CX_TEST_ASSERT(buf.pos == 1);
universe@792 504 CX_TEST_ASSERT(buf.size == 2);
universe@792 505 CX_TEST_ASSERT(memcmp(buf.space, "stst____XXXXXXXX", 16) == 0);
universe@792 506 TEST_BUFFER_SHIFT_TEARDOWN(buf);
universe@792 507 }
universe@792 508 }
universe@792 509
universe@792 510 CX_TEST(test_buffer_shift_right_zero) {
universe@792 511 TEST_BUFFER_SHIFT_SETUP(buf);
universe@792 512 CX_TEST_DO {
universe@792 513 int ret = cxBufferShiftRight(&buf, 0);
universe@792 514 CX_TEST_ASSERT(ret == 0);
universe@792 515 CX_TEST_ASSERT(buf.pos == 4);
universe@792 516 CX_TEST_ASSERT(buf.size == 4);
universe@792 517 CX_TEST_ASSERT(memcmp(buf.space, "test____XXXXXXXX", 16) == 0);
universe@792 518 TEST_BUFFER_SHIFT_TEARDOWN(buf);
universe@792 519 }
universe@792 520 }
universe@792 521
universe@792 522 CX_TEST(test_buffer_shift_right_zero_offset_interface) {
universe@792 523 TEST_BUFFER_SHIFT_SETUP(buf);
universe@792 524 CX_TEST_DO {
universe@792 525 int ret = cxBufferShift(&buf, +0);
universe@792 526 CX_TEST_ASSERT(ret == 0);
universe@792 527 CX_TEST_ASSERT(buf.pos == 4);
universe@792 528 CX_TEST_ASSERT(buf.size == 4);
universe@792 529 CX_TEST_ASSERT(memcmp(buf.space, "test____XXXXXXXX", 16) == 0);
universe@792 530 TEST_BUFFER_SHIFT_TEARDOWN(buf);
universe@792 531 }
universe@792 532 }
universe@792 533
universe@792 534 CX_TEST(test_buffer_shift_right_standard) {
universe@792 535 TEST_BUFFER_SHIFT_SETUP(buf);
universe@792 536 CX_TEST_DO {
universe@792 537 int ret = cxBufferShiftRight(&buf, 3);
universe@792 538 CX_TEST_ASSERT(ret == 0);
universe@792 539 CX_TEST_ASSERT(buf.pos == 7);
universe@792 540 CX_TEST_ASSERT(buf.size == 7);
universe@792 541 CX_TEST_ASSERT(memcmp(buf.space, "testest_XXXXXXXX", 16) == 0);
universe@792 542 TEST_BUFFER_SHIFT_TEARDOWN(buf);
universe@792 543 }
universe@792 544 }
universe@792 545
universe@792 546 CX_TEST(test_buffer_shift_right_overshift_discard) {
universe@792 547 TEST_BUFFER_SHIFT_SETUP(buf);
universe@792 548 CX_TEST_DO {
universe@792 549 int ret = cxBufferShiftRight(&buf, 6);
universe@792 550 CX_TEST_ASSERT(ret == 0);
universe@792 551 CX_TEST_ASSERT(buf.pos == 8);
universe@792 552 CX_TEST_ASSERT(buf.size == 8);
universe@792 553 CX_TEST_ASSERT(buf.capacity == 8);
universe@792 554 CX_TEST_ASSERT(memcmp(buf.space, "test__teXXXXXXXX", 16) == 0);
universe@792 555 TEST_BUFFER_SHIFT_TEARDOWN(buf);
universe@792 556 }
universe@792 557 }
universe@792 558
universe@792 559 CX_TEST(test_buffer_shift_right_overshift_extend) {
universe@792 560 TEST_BUFFER_SHIFT_SETUP(buf);
universe@792 561 buf.flags |= CX_BUFFER_AUTO_EXTEND;
universe@792 562 CX_TEST_DO {
universe@792 563 int ret = cxBufferShiftRight(&buf, 6);
universe@792 564 CX_TEST_ASSERT(ret == 0);
universe@792 565 CX_TEST_ASSERT(buf.pos == 10);
universe@792 566 CX_TEST_ASSERT(buf.size == 10);
universe@792 567 CX_TEST_ASSERT(buf.capacity >= 10);
universe@792 568 // cannot assert more than 10 bytes because
universe@792 569 // the buffer was required to reallocate the space
universe@792 570 CX_TEST_ASSERT(memcmp(buf.space, "test__test", 10) == 0);
universe@792 571 TEST_BUFFER_SHIFT_TEARDOWN(buf);
universe@792 572 }
universe@792 573 }
universe@792 574
universe@792 575 CX_TEST(test_buffer_shift_right_offset_interface) {
universe@792 576 TEST_BUFFER_SHIFT_SETUP(buf);
universe@792 577 buf.pos = 3;
universe@792 578 CX_TEST_DO {
universe@792 579 int ret = cxBufferShift(&buf, 2);
universe@792 580 CX_TEST_ASSERT(ret == 0);
universe@792 581 CX_TEST_ASSERT(buf.pos == 5);
universe@792 582 CX_TEST_ASSERT(buf.size == 6);
universe@792 583 CX_TEST_ASSERT(memcmp(buf.space, "tetest__XXXXXXXX", 16) == 0);
universe@792 584 TEST_BUFFER_SHIFT_TEARDOWN(buf);
universe@792 585 }
universe@792 586 }
universe@792 587
universe@793 588 static size_t mock_write_limited_rate(
universe@793 589 void const *ptr,
universe@793 590 size_t size,
universe@793 591 __attribute__((unused)) size_t nitems,
universe@793 592 CxBuffer *buffer
universe@793 593 ) {
universe@793 594 // simulate limited target drain capacity
universe@793 595 static bool full = false;
universe@793 596 if (full) {
universe@793 597 full = false;
universe@793 598 return 0;
universe@793 599 } else {
universe@793 600 full = true;
universe@793 601 return cxBufferWrite(ptr, size, nitems > 2 ? 2 : nitems, buffer);
universe@793 602 }
universe@793 603 }
universe@793 604
universe@793 605 CX_TEST(test_buffer_write_size_one_fit) {
universe@793 606 CxBuffer buf, target;
universe@793 607 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 608 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 609 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 610 buf.capacity = 8;
universe@793 611 buf.size = buf.pos = 4;
universe@793 612 const char *data = "test";
universe@793 613 CX_TEST_DO {
universe@793 614 size_t written = cxBufferWrite(data, 1, 4, &buf);
universe@793 615 CX_TEST_ASSERT(written == 4);
universe@793 616 CX_TEST_ASSERT(buf.size == 8);
universe@793 617 CX_TEST_ASSERT(buf.pos == 8);
universe@793 618 CX_TEST_ASSERT(buf.capacity == 8);
universe@793 619 CX_TEST_ASSERT(0 == memcmp(buf.space, "preptest", 8));
universe@793 620 }
universe@793 621
universe@793 622 cxBufferDestroy(&buf);
universe@793 623 cxBufferDestroy(&target);
universe@793 624 }
universe@793 625
universe@793 626 CX_TEST(test_buffer_write_size_one_discard) {
universe@793 627 CxBuffer buf, target;
universe@793 628 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 629 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 630 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 631 buf.capacity = 8;
universe@793 632 buf.size = buf.pos = 4;
universe@793 633 const char *data = "testing";
universe@793 634 CX_TEST_DO {
universe@793 635 size_t written = cxBufferWrite(data, 1, 7, &buf);
universe@793 636 CX_TEST_ASSERT(written == 4);
universe@793 637 CX_TEST_ASSERT(buf.size == 8);
universe@793 638 CX_TEST_ASSERT(buf.pos == 8);
universe@793 639 CX_TEST_ASSERT(buf.capacity == 8);
universe@793 640 CX_TEST_ASSERT(0 == memcmp(buf.space, "preptest\0", 9));
universe@793 641 }
universe@793 642 cxBufferDestroy(&buf);
universe@793 643 cxBufferDestroy(&target);
universe@793 644 }
universe@793 645
universe@793 646 CX_TEST(test_buffer_write_size_one_extend) {
universe@793 647 CxBuffer buf, target;
universe@793 648 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 649 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 650 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 651 buf.capacity = 8;
universe@793 652 buf.size = buf.pos = 4;
universe@793 653 buf.flags |= CX_BUFFER_AUTO_EXTEND;
universe@793 654 const char *data = "testing";
universe@793 655 CX_TEST_DO {
universe@793 656 size_t written = cxBufferWrite(data, 1, 7, &buf);
universe@793 657 CX_TEST_ASSERT(written == 7);
universe@793 658 CX_TEST_ASSERT(buf.size == 11);
universe@793 659 CX_TEST_ASSERT(buf.pos == 11);
universe@793 660 CX_TEST_ASSERT(buf.capacity >= 11);
universe@793 661 CX_TEST_ASSERT(0 == memcmp(buf.space, "preptesting", 11));
universe@793 662 }
universe@793 663 cxBufferDestroy(&buf);
universe@793 664 cxBufferDestroy(&target);
universe@793 665 }
universe@793 666
universe@793 667 CX_TEST(test_buffer_write_multibyte_fit) {
universe@793 668 CxBuffer buf, target;
universe@793 669 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 670 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 671 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 672 buf.capacity = 8;
universe@793 673 buf.size = buf.pos = 4;
universe@793 674 const char *data = "test";
universe@793 675 CX_TEST_DO {
universe@793 676 size_t written = cxBufferWrite(data, 2, 2, &buf);
universe@793 677 CX_TEST_ASSERT(written == 2);
universe@793 678 CX_TEST_ASSERT(buf.size == 8);
universe@793 679 CX_TEST_ASSERT(buf.pos == 8);
universe@793 680 CX_TEST_ASSERT(buf.capacity == 8);
universe@793 681 CX_TEST_ASSERT(0 == memcmp(buf.space, "preptest", 8));
universe@793 682 }
universe@793 683 cxBufferDestroy(&buf);
universe@793 684 cxBufferDestroy(&target);
universe@793 685 }
universe@793 686
universe@793 687 CX_TEST(test_buffer_write_multibyte_discard) {
universe@793 688 CxBuffer buf, target;
universe@793 689 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 690 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 691 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 692 buf.capacity = 8;
universe@793 693 buf.size = 4;
universe@793 694 buf.pos = 3;
universe@793 695 const char *data = "testing";
universe@793 696 CX_TEST_DO {
universe@793 697 size_t written = cxBufferWrite(data, 2, 4, &buf);
universe@793 698 // remember: whole elements are discarded if they do not fit
universe@793 699 CX_TEST_ASSERT(written == 2);
universe@793 700 CX_TEST_ASSERT(buf.size == 7);
universe@793 701 CX_TEST_ASSERT(buf.pos == 7);
universe@793 702 CX_TEST_ASSERT(buf.capacity == 8);
universe@793 703 CX_TEST_ASSERT(0 == memcmp(buf.space, "pretest\0", 8));
universe@793 704 }
universe@793 705 cxBufferDestroy(&buf);
universe@793 706 cxBufferDestroy(&target);
universe@793 707 }
universe@793 708
universe@793 709 CX_TEST(test_buffer_write_multibyte_extend) {
universe@793 710 CxBuffer buf, target;
universe@793 711 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 712 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 713 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 714 buf.capacity = 8;
universe@793 715 buf.size = 4;
universe@793 716 buf.pos = 3;
universe@793 717 buf.flags |= CX_BUFFER_AUTO_EXTEND;
universe@793 718 const char *data = "tester";
universe@793 719 CX_TEST_DO {
universe@793 720 size_t written = cxBufferWrite(data, 2, 3, &buf);
universe@793 721 // remember: whole elements are discarded if they do not fit
universe@793 722 CX_TEST_ASSERT(written == 3);
universe@793 723 CX_TEST_ASSERT(buf.size == 9);
universe@793 724 CX_TEST_ASSERT(buf.pos == 9);
universe@793 725 CX_TEST_ASSERT(buf.capacity >= 9);
universe@793 726 CX_TEST_ASSERT(0 == memcmp(buf.space, "pretester", 9));
universe@793 727 }
universe@793 728 cxBufferDestroy(&buf);
universe@793 729 cxBufferDestroy(&target);
universe@793 730 }
universe@793 731
universe@793 732 CX_TEST(test_buffer_put_fit) {
universe@793 733 CxBuffer buf, target;
universe@793 734 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 735 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 736 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 737 buf.capacity = 8;
universe@793 738 buf.size = buf.pos = 4;
universe@793 739 CX_TEST_DO {
universe@793 740 int c = cxBufferPut(&buf, 0x200 | 'a');
universe@793 741 CX_TEST_ASSERT(c == 'a');
universe@793 742 CX_TEST_ASSERT(buf.size == 5);
universe@793 743 CX_TEST_ASSERT(buf.pos == 5);
universe@793 744 CX_TEST_ASSERT(buf.capacity == 8);
universe@793 745 CX_TEST_ASSERT(0 == memcmp(buf.space, "prepa\0", 6));
universe@793 746 }
universe@793 747 cxBufferDestroy(&buf);
universe@793 748 cxBufferDestroy(&target);
universe@793 749 }
universe@793 750
universe@793 751 CX_TEST(test_buffer_put_discard) {
universe@793 752 CxBuffer buf, target;
universe@793 753 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 754 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 755 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 756 buf.capacity = 8;
universe@793 757 buf.size = 4;
universe@793 758 buf.pos = 8;
universe@793 759 CX_TEST_DO {
universe@793 760 int c = cxBufferPut(&buf, 0x200 | 'a');
universe@793 761 CX_TEST_ASSERT(c == EOF);
universe@793 762 CX_TEST_ASSERT(buf.size == 4);
universe@793 763 CX_TEST_ASSERT(buf.pos == 8);
universe@793 764 CX_TEST_ASSERT(buf.capacity == 8);
universe@793 765 CX_TEST_ASSERT(0 == memcmp(buf.space, "prep\0\0\0\0\0", 9));
universe@793 766 }
universe@793 767 cxBufferDestroy(&buf);
universe@793 768 cxBufferDestroy(&target);
universe@793 769 }
universe@793 770
universe@793 771 CX_TEST(test_buffer_put_extend) {
universe@793 772 CxBuffer buf, target;
universe@793 773 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 774 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 775 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 776 buf.capacity = 8;
universe@793 777 buf.size = 4;
universe@793 778 buf.pos = 8;
universe@793 779 buf.flags |= CX_BUFFER_AUTO_EXTEND;
universe@793 780 CX_TEST_DO {
universe@793 781 int c = cxBufferPut(&buf, 0x200 | 'a');
universe@793 782 CX_TEST_ASSERT(c == 'a');
universe@793 783 CX_TEST_ASSERT(buf.size == 9);
universe@793 784 CX_TEST_ASSERT(buf.pos == 9);
universe@793 785 CX_TEST_ASSERT(buf.capacity >= 9);
universe@793 786 CX_TEST_ASSERT(0 == memcmp(buf.space, "prep\0\0\0\0a", 9));
universe@793 787 }
universe@793 788 cxBufferDestroy(&buf);
universe@793 789 cxBufferDestroy(&target);
universe@793 790 }
universe@793 791
universe@793 792 CX_TEST(test_buffer_put_string_fit) {
universe@793 793 CxBuffer buf, target;
universe@793 794 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 795 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 796 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 797 buf.capacity = 8;
universe@793 798 buf.size = buf.pos = 4;
universe@793 799 const char *data = "test";
universe@793 800 CX_TEST_DO {
universe@793 801 size_t written = cxBufferPutString(&buf, data);
universe@793 802 CX_TEST_ASSERT(written == 4);
universe@793 803 CX_TEST_ASSERT(buf.size == 8);
universe@793 804 CX_TEST_ASSERT(buf.pos == 8);
universe@793 805 CX_TEST_ASSERT(buf.capacity == 8);
universe@793 806 CX_TEST_ASSERT(0 == memcmp(buf.space, "preptest", 8));
universe@793 807 }
universe@793 808 cxBufferDestroy(&buf);
universe@793 809 cxBufferDestroy(&target);
universe@793 810 }
universe@793 811
universe@793 812 CX_TEST(test_buffer_put_string_discard) {
universe@793 813 CxBuffer buf, target;
universe@793 814 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 815 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 816 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 817 buf.capacity = 8;
universe@793 818 buf.size = buf.pos = 4;
universe@793 819 const char *data = "testing";
universe@793 820 CX_TEST_DO {
universe@793 821 size_t written = cxBufferPutString(&buf, data);
universe@793 822 CX_TEST_ASSERT(written == 4);
universe@793 823 CX_TEST_ASSERT(buf.size == 8);
universe@793 824 CX_TEST_ASSERT(buf.pos == 8);
universe@793 825 CX_TEST_ASSERT(buf.capacity == 8);
universe@793 826 CX_TEST_ASSERT(0 == memcmp(buf.space, "preptest\0", 9));
universe@793 827 }
universe@793 828 cxBufferDestroy(&buf);
universe@793 829 cxBufferDestroy(&target);
universe@793 830 }
universe@793 831
universe@793 832 CX_TEST(test_buffer_put_string_extend) {
universe@793 833 CxBuffer buf, target;
universe@793 834 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 835 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 836 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 837 buf.capacity = 8;
universe@793 838 buf.size = buf.pos = 4;
universe@793 839 buf.flags |= CX_BUFFER_AUTO_EXTEND;
universe@793 840 const char *data = "testing";
universe@793 841 CX_TEST_DO {
universe@793 842 size_t written = cxBufferPutString(&buf, data);
universe@793 843 CX_TEST_ASSERT(written == 7);
universe@793 844 CX_TEST_ASSERT(buf.size == 11);
universe@793 845 CX_TEST_ASSERT(buf.pos == 11);
universe@793 846 CX_TEST_ASSERT(buf.capacity >= 11);
universe@793 847 CX_TEST_ASSERT(0 == memcmp(buf.space, "preptesting", 11));
universe@793 848 }
universe@793 849 cxBufferDestroy(&buf);
universe@793 850 cxBufferDestroy(&target);
universe@793 851 }
universe@793 852
universe@793 853 CX_TEST(test_buffer_write_size_overflow) {
universe@793 854 CxBuffer buf, target;
universe@793 855 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 856 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 857 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 858 buf.capacity = 8;
universe@793 859 buf.size = buf.pos = 4;
universe@793 860 const char *data = "testing";
universe@793 861 CX_TEST_DO {
universe@793 862 size_t written = cxBufferWrite(data, 8, SIZE_MAX / 4, &buf);
universe@793 863 CX_TEST_ASSERT(written == 0);
universe@793 864 CX_TEST_ASSERT(buf.capacity == 8);
universe@793 865 CX_TEST_ASSERT(buf.pos == 4);
universe@793 866 CX_TEST_ASSERT(buf.size == 4);
universe@793 867 CX_TEST_ASSERT(0 == memcmp(buf.space, "prep\0", 5));
universe@793 868 }
universe@793 869 cxBufferDestroy(&buf);
universe@793 870 cxBufferDestroy(&target);
universe@793 871 }
universe@793 872
universe@793 873 CX_TEST(test_buffer_write_capacity_overflow) {
universe@793 874 CxBuffer buf, target;
universe@793 875 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 876 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 877 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 878 buf.capacity = 8;
universe@793 879 buf.size = buf.pos = 4;
universe@793 880 buf.flags |= CX_BUFFER_AUTO_EXTEND;
universe@793 881 const char *data = "testing";
universe@793 882 CX_TEST_DO {
universe@793 883 size_t written = cxBufferWrite(data, 1, SIZE_MAX - 2, &buf);
universe@793 884 CX_TEST_ASSERT(written == 0);
universe@793 885 CX_TEST_ASSERT(buf.capacity == 8);
universe@793 886 CX_TEST_ASSERT(buf.pos == 4);
universe@793 887 CX_TEST_ASSERT(buf.size == 4);
universe@793 888 CX_TEST_ASSERT(0 == memcmp(buf.space, "prep\0", 5));
universe@793 889 }
universe@793 890 cxBufferDestroy(&buf);
universe@793 891 cxBufferDestroy(&target);
universe@793 892 }
universe@793 893
universe@793 894 CX_TEST(test_buffer_write_only_overwrite) {
universe@793 895 CxBuffer buf, target;
universe@793 896 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 897 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 898 memcpy(buf.space, "preptest\0\0\0\0\0\0\0\0", 16);
universe@793 899 buf.capacity = 8;
universe@793 900 buf.pos = 3;
universe@793 901 buf.size = 8;
universe@793 902 buf.flags |= CX_BUFFER_AUTO_EXTEND;
universe@793 903 CX_TEST_DO {
universe@793 904 size_t written = cxBufferWrite("XXX", 2, 2, &buf);
universe@793 905 CX_TEST_ASSERT(written == 2);
universe@793 906 CX_TEST_ASSERT(buf.capacity == 8);
universe@793 907 CX_TEST_ASSERT(buf.size == 8);
universe@793 908 CX_TEST_ASSERT(buf.pos == 7);
universe@793 909 CX_TEST_ASSERT(0 == memcmp(buf.space, "preXXX\0t", 8));
universe@793 910 }
universe@793 911 cxBufferDestroy(&buf);
universe@793 912 cxBufferDestroy(&target);
universe@793 913 }
universe@793 914
universe@793 915 CX_TEST(test_buffer_write_flush_at_capacity) {
universe@793 916 CxBuffer buf, target;
universe@793 917 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 918 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 919 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 920 buf.capacity = 8;
universe@793 921 buf.size = buf.pos = 4;
universe@793 922 buf.flush_target = &target;
universe@793 923 buf.flush_func = (cx_write_func)cxBufferWrite;
universe@793 924 buf.flush_blkmax = 1;
universe@793 925 CX_TEST_DO {
universe@793 926 size_t written = cxBufferWrite("foo", 1, 3, &buf);
universe@793 927 CX_TEST_ASSERT(written == 3);
universe@793 928 CX_TEST_ASSERT(buf.pos == 7);
universe@793 929 CX_TEST_ASSERT(buf.size == 7);
universe@793 930 CX_TEST_ASSERT(target.pos == 0);
universe@793 931 CX_TEST_ASSERT(target.size == 0);
universe@793 932 written = cxBufferWrite("hello", 1, 5, &buf);
universe@793 933 CX_TEST_ASSERT(written == 5);
universe@793 934 CX_TEST_ASSERT(buf.pos == 0);
universe@793 935 CX_TEST_ASSERT(buf.size == 0);
universe@793 936 CX_TEST_ASSERT(buf.capacity == 8);
universe@793 937 CX_TEST_ASSERT(target.pos == 12);
universe@793 938 CX_TEST_ASSERT(target.size == 12);
universe@793 939 CX_TEST_ASSERT(0 == memcmp(target.space, "prepfoohello", 12));
universe@793 940 }
universe@793 941 cxBufferDestroy(&buf);
universe@793 942 cxBufferDestroy(&target);
universe@793 943 }
universe@793 944
universe@793 945 CX_TEST(test_buffer_write_flush_at_threshold) {
universe@793 946 CxBuffer buf, target;
universe@793 947 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 948 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 949 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 950 buf.capacity = 8;
universe@793 951 buf.size = buf.pos = 4;
universe@793 952 buf.flush_target = &target;
universe@793 953 buf.flush_func = (cx_write_func)cxBufferWrite;
universe@793 954 buf.flush_blkmax = 1;
universe@793 955 buf.flush_threshold = 12;
universe@793 956 buf.flags |= CX_BUFFER_AUTO_EXTEND;
universe@793 957 CX_TEST_DO {
universe@793 958 size_t written = cxBufferWrite("foobar", 1, 6, &buf);
universe@793 959 CX_TEST_ASSERT(written == 6);
universe@793 960 CX_TEST_ASSERT(buf.pos == 10);
universe@793 961 CX_TEST_ASSERT(buf.size == 10);
universe@793 962 CX_TEST_ASSERT(buf.capacity >= 10);
universe@793 963 CX_TEST_ASSERT(buf.capacity <= 12);
universe@793 964 CX_TEST_ASSERT(target.pos == 0);
universe@793 965 CX_TEST_ASSERT(target.size == 0);
universe@793 966 written = cxBufferWrite("hello", 1, 5, &buf);
universe@793 967 CX_TEST_ASSERT(written == 5);
universe@793 968 CX_TEST_ASSERT(buf.pos == 0);
universe@793 969 CX_TEST_ASSERT(buf.size == 0);
universe@793 970 CX_TEST_ASSERT(buf.capacity <= 12);
universe@793 971 CX_TEST_ASSERT(target.pos == 15);
universe@793 972 CX_TEST_ASSERT(target.size == 15);
universe@793 973 CX_TEST_ASSERT(0 == memcmp(target.space, "prepfoobarhello", 15));
universe@793 974 }
universe@793 975 cxBufferDestroy(&buf);
universe@793 976 cxBufferDestroy(&target);
universe@793 977 }
universe@793 978
universe@793 979 CX_TEST(test_buffer_write_flush_rate_limited) {
universe@793 980 CxBuffer buf, target;
universe@793 981 cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND);
universe@793 982 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 983 memcpy(buf.space, "prep\0\0\0\0\0\0\0\0\0\0\0\0", 16);
universe@793 984 buf.capacity = 8;
universe@793 985 buf.size = buf.pos = 4;
universe@793 986 buf.flush_target = &target;
universe@793 987 buf.flush_blkmax = 1;
universe@793 988 // limit the rate of the flush function and the capacity of the target
universe@793 989 buf.flush_func = (cx_write_func) mock_write_limited_rate;
universe@793 990 target.capacity = 16;
universe@793 991 target.flags &= ~CX_BUFFER_AUTO_EXTEND;
universe@793 992 CX_TEST_DO {
universe@793 993 size_t written = cxBufferWrite("foo", 1, 3, &buf);
universe@793 994 CX_TEST_ASSERT(written == 3);
universe@793 995 CX_TEST_ASSERT(buf.pos == 7);
universe@793 996 CX_TEST_ASSERT(buf.size == 7);
universe@793 997 CX_TEST_ASSERT(target.pos == 0);
universe@793 998 CX_TEST_ASSERT(target.size == 0);
universe@793 999 written = cxBufferWrite("hello, world!", 1, 13, &buf);
universe@793 1000 // " world!" fits into this buffer, the remaining stuff is flushed out
universe@793 1001 CX_TEST_ASSERT(written == 13);
universe@793 1002 CX_TEST_ASSERT(buf.pos == 7);
universe@793 1003 CX_TEST_ASSERT(buf.size == 7);
universe@793 1004 CX_TEST_ASSERT(buf.capacity == 8);
universe@793 1005 CX_TEST_ASSERT(0 == memcmp(buf.space, " world!", 7));
universe@793 1006 CX_TEST_ASSERT(target.pos == 13);
universe@793 1007 CX_TEST_ASSERT(target.size == 13);
universe@793 1008 CX_TEST_ASSERT(target.capacity == 16);
universe@793 1009 CX_TEST_ASSERT(0 == memcmp(target.space, "prepfoohello,", 13));
universe@793 1010 }
universe@793 1011 cxBufferDestroy(&buf);
universe@793 1012 cxBufferDestroy(&target);
universe@793 1013 }
universe@793 1014
universe@793 1015 CX_TEST(test_buffer_get) {
universe@793 1016 CxBuffer buf;
universe@793 1017 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 1018 memcpy(buf.space, "some data\0\0\0\0\0\0\0", 16);
universe@793 1019 buf.capacity = 12;
universe@793 1020 buf.size = 9;
universe@793 1021 buf.pos = 2;
universe@793 1022 CX_TEST_DO {
universe@793 1023 CX_TEST_ASSERT(cxBufferGet(&buf) == 'm');
universe@793 1024 CX_TEST_ASSERT(cxBufferGet(&buf) == 'e');
universe@793 1025 CX_TEST_ASSERT(cxBufferGet(&buf) == ' ');
universe@793 1026 CX_TEST_ASSERT(cxBufferGet(&buf) == 'd');
universe@793 1027 CX_TEST_ASSERT(buf.pos == 6);
universe@793 1028 }
universe@793 1029 cxBufferDestroy(&buf);
universe@793 1030 }
universe@793 1031
universe@793 1032 CX_TEST(test_buffer_get_eof) {
universe@793 1033 CxBuffer buf;
universe@793 1034 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 1035 memcpy(buf.space, "some data\0\0\0\0\0\0\0", 16);
universe@793 1036 buf.capacity = 12;
universe@793 1037 buf.pos = buf.size = 9;
universe@793 1038 CX_TEST_DO {
universe@793 1039 CX_TEST_ASSERT(cxBufferGet(&buf) == EOF);
universe@793 1040 }
universe@793 1041 cxBufferDestroy(&buf);
universe@793 1042 }
universe@793 1043
universe@793 1044 CX_TEST(test_buffer_read) {
universe@793 1045 CxBuffer buf;
universe@793 1046 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 1047 memcpy(buf.space, "some data\0\0\0\0\0\0\0", 16);
universe@793 1048 buf.capacity = 12;
universe@793 1049 buf.size = 9;
universe@793 1050 buf.pos = 2;
universe@793 1051 CX_TEST_DO {
universe@793 1052 char target[4];
universe@793 1053 size_t read = cxBufferRead(&target, 1, 4, &buf);
universe@793 1054 CX_TEST_ASSERT(read == 4);
universe@793 1055 CX_TEST_ASSERT(0 == memcmp(&target, "me d", 4));
universe@793 1056 CX_TEST_ASSERT(buf.pos == 6);
universe@793 1057 }
universe@793 1058 cxBufferDestroy(&buf);
universe@793 1059 }
universe@793 1060
universe@793 1061 CX_TEST(test_buffer_read_oob) {
universe@793 1062 CxBuffer buf;
universe@793 1063 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 1064 memcpy(buf.space, "some data\0\0\0\0\0\0\0", 16);
universe@793 1065 buf.capacity = 12;
universe@793 1066 buf.size = 9;
universe@793 1067 buf.pos = 6;
universe@793 1068 CX_TEST_DO {
universe@793 1069 char target[4];
universe@793 1070 size_t read = cxBufferRead(&target, 1, 4, &buf);
universe@793 1071 CX_TEST_ASSERT(read == 3);
universe@793 1072 CX_TEST_ASSERT(0 == memcmp(&target, "ata", 3));
universe@793 1073 CX_TEST_ASSERT(buf.pos == 9);
universe@793 1074 }
universe@793 1075 cxBufferDestroy(&buf);
universe@793 1076 }
universe@793 1077
universe@793 1078 CX_TEST(test_buffer_read_oob_multibyte) {
universe@793 1079 CxBuffer buf;
universe@793 1080 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 1081 memcpy(buf.space, "some data\0\0\0\0\0\0\0", 16);
universe@793 1082 buf.capacity = 12;
universe@793 1083 buf.size = 9;
universe@793 1084 buf.pos = 6;
universe@793 1085 CX_TEST_DO {
universe@793 1086 char target[4];
universe@793 1087 target[2] = '\0';
universe@793 1088 size_t read = cxBufferRead(&target, 2, 2, &buf);
universe@793 1089 CX_TEST_ASSERT(read == 1);
universe@793 1090 CX_TEST_ASSERT(0 == memcmp(&target, "at\0", 3));
universe@793 1091 CX_TEST_ASSERT(buf.pos == 8);
universe@793 1092 }
universe@793 1093 cxBufferDestroy(&buf);
universe@793 1094 }
universe@793 1095
universe@793 1096 CX_TEST(test_buffer_read_eof) {
universe@793 1097 CxBuffer buf;
universe@793 1098 cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT);
universe@793 1099 memcpy(buf.space, "some data\0\0\0\0\0\0\0", 16);
universe@793 1100 buf.capacity = 12;
universe@793 1101 buf.size = buf.pos = 9;
universe@793 1102 CX_TEST_DO {
universe@793 1103 char target[4];
universe@793 1104 size_t read = cxBufferRead(&target, 1, 1, &buf);
universe@793 1105 CX_TEST_ASSERT(read == 0);
universe@793 1106 CX_TEST_ASSERT(buf.pos == 9);
universe@793 1107 }
universe@793 1108 cxBufferDestroy(&buf);
universe@793 1109 }
universe@793 1110
universe@789 1111 CxTestSuite *cx_test_suite_buffer(void) {
universe@789 1112 CxTestSuite *suite = cx_test_suite_new("buffer");
universe@789 1113
universe@789 1114 cx_test_register(suite, test_buffer_init_wrap_space);
universe@789 1115 cx_test_register(suite, test_buffer_init_wrap_space_auto_extend);
universe@789 1116 cx_test_register(suite, test_buffer_init_wrap_space_auto_free);
universe@789 1117 cx_test_register(suite, test_buffer_init_fresh_space);
universe@789 1118 cx_test_register(suite, test_buffer_init_on_heap);
universe@789 1119 cx_test_register(suite, test_buffer_minimum_capacity_sufficient);
universe@789 1120 cx_test_register(suite, test_buffer_minimum_capacity_extend);
universe@789 1121 cx_test_register(suite, test_buffer_clear);
universe@789 1122 cx_test_register(suite, test_buffer_reset);
universe@789 1123 cx_test_register(suite, test_buffer_seek_set_zero);
universe@789 1124 cx_test_register(suite, test_buffer_seek_set_valid);
universe@789 1125 cx_test_register(suite, test_buffer_seek_set_invalid);
universe@789 1126 cx_test_register(suite, test_buffer_seek_cur_zero);
universe@789 1127 cx_test_register(suite, test_buffer_seek_cur_valid_positive);
universe@789 1128 cx_test_register(suite, test_buffer_seek_cur_valid_negative);
universe@789 1129 cx_test_register(suite, test_buffer_seek_cur_invalid_positive);
universe@789 1130 cx_test_register(suite, test_buffer_seek_cur_invalid_negative);
universe@789 1131 cx_test_register(suite, test_buffer_seek_end_zero);
universe@789 1132 cx_test_register(suite, test_buffer_seek_end_valid);
universe@789 1133 cx_test_register(suite, test_buffer_seek_end_invalid);
universe@789 1134 cx_test_register(suite, test_buffer_seek_whence_invalid);
universe@792 1135 cx_test_register(suite, test_buffer_eof_reached);
universe@792 1136 cx_test_register(suite, test_buffer_eof_not_reached);
universe@792 1137 cx_test_register(suite, test_buffer_shift_left_zero);
universe@792 1138 cx_test_register(suite, test_buffer_shift_left_zero_offset_interface);
universe@792 1139 cx_test_register(suite, test_buffer_shift_left_standard);
universe@792 1140 cx_test_register(suite, test_buffer_shift_left_overshift);
universe@792 1141 cx_test_register(suite, test_buffer_shift_left_overshift_pos_only);
universe@792 1142 cx_test_register(suite, test_buffer_shift_left_offset_interface);
universe@792 1143 cx_test_register(suite, test_buffer_shift_right_zero);
universe@792 1144 cx_test_register(suite, test_buffer_shift_right_zero_offset_interface);
universe@792 1145 cx_test_register(suite, test_buffer_shift_right_standard);
universe@792 1146 cx_test_register(suite, test_buffer_shift_right_overshift_discard);
universe@792 1147 cx_test_register(suite, test_buffer_shift_right_overshift_extend);
universe@792 1148 cx_test_register(suite, test_buffer_shift_right_offset_interface);
universe@793 1149 cx_test_register(suite, test_buffer_write_size_one_fit);
universe@793 1150 cx_test_register(suite, test_buffer_write_size_one_discard);
universe@793 1151 cx_test_register(suite, test_buffer_write_size_one_extend);
universe@793 1152 cx_test_register(suite, test_buffer_write_multibyte_fit);
universe@793 1153 cx_test_register(suite, test_buffer_write_multibyte_discard);
universe@793 1154 cx_test_register(suite, test_buffer_write_multibyte_extend);
universe@793 1155 cx_test_register(suite, test_buffer_put_fit);
universe@793 1156 cx_test_register(suite, test_buffer_put_discard);
universe@793 1157 cx_test_register(suite, test_buffer_put_extend);
universe@793 1158 cx_test_register(suite, test_buffer_put_string_fit);
universe@793 1159 cx_test_register(suite, test_buffer_put_string_discard);
universe@793 1160 cx_test_register(suite, test_buffer_put_string_extend);
universe@793 1161 cx_test_register(suite, test_buffer_write_size_overflow);
universe@793 1162 cx_test_register(suite, test_buffer_write_capacity_overflow);
universe@793 1163 cx_test_register(suite, test_buffer_write_only_overwrite);
universe@793 1164 cx_test_register(suite, test_buffer_write_flush_at_capacity);
universe@793 1165 cx_test_register(suite, test_buffer_write_flush_at_threshold);
universe@793 1166 cx_test_register(suite, test_buffer_write_flush_rate_limited);
universe@793 1167 cx_test_register(suite, test_buffer_get);
universe@793 1168 cx_test_register(suite, test_buffer_get_eof);
universe@793 1169 cx_test_register(suite, test_buffer_read);
universe@793 1170 cx_test_register(suite, test_buffer_read_oob);
universe@793 1171 cx_test_register(suite, test_buffer_read_oob_multibyte);
universe@793 1172 cx_test_register(suite, test_buffer_read_eof);
universe@793 1173
universe@789 1174 return suite;
universe@789 1175 }

mercurial