Mon, 01 Jan 2024 16:42:37 +0100
begin migration of buffer tests - relates to #342
tests/Makefile | file | annotate | diff | comparison | revisions | |
tests/test_buffer.c | file | annotate | diff | comparison | revisions | |
tests/test_buffer.cpp | file | annotate | diff | comparison | revisions | |
tests/ucxtest.c | file | annotate | diff | comparison | revisions |
1.1 --- a/tests/Makefile Mon Jan 01 15:33:20 2024 +0100 1.2 +++ b/tests/Makefile Mon Jan 01 16:42:37 2024 +0100 1.3 @@ -28,8 +28,8 @@ 1.4 TEST_DIR=$(build_dir)/tests 1.5 1.6 SRC = util_allocator.c test_utils.c test_hash_key.c test_allocator.c \ 1.7 - test_compare.c \ 1.8 - test_string.c test_printf.c test_mempool.c test_hash_map.c ucxtest.c 1.9 + test_compare.c test_string.c test_buffer.c \ 1.10 + test_printf.c test_mempool.c test_hash_map.c ucxtest.c 1.11 1.12 OBJ_EXT=.o 1.13 OBJ=$(SRC:%.c=$(TEST_DIR)/%$(OBJ_EXT)) 1.14 @@ -52,6 +52,11 @@ 1.15 @echo "Compiling $<" 1.16 $(CC) -o $@ $(CFLAGS) -c $< 1.17 1.18 +$(TEST_DIR)/test_buffer$(OBJ_EXT): test_buffer.c ../src/cx/test.h \ 1.19 + ../src/cx/buffer.h ../src/cx/common.h ../src/cx/allocator.h 1.20 + @echo "Compiling $<" 1.21 + $(CC) -o $@ $(CFLAGS) -c $< 1.22 + 1.23 $(TEST_DIR)/test_compare$(OBJ_EXT): test_compare.c ../src/cx/test.h \ 1.24 ../src/cx/compare.h ../src/cx/common.h 1.25 @echo "Compiling $<"
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/tests/test_buffer.c Mon Jan 01 16:42:37 2024 +0100 2.3 @@ -0,0 +1,418 @@ 2.4 +/* 2.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 2.6 + * 2.7 + * Copyright 2023 Mike Becker, Olaf Wintermann All rights reserved. 2.8 + * 2.9 + * Redistribution and use in source and binary forms, with or without 2.10 + * modification, are permitted provided that the following conditions are met: 2.11 + * 2.12 + * 1. Redistributions of source code must retain the above copyright 2.13 + * notice, this list of conditions and the following disclaimer. 2.14 + * 2.15 + * 2. Redistributions in binary form must reproduce the above copyright 2.16 + * notice, this list of conditions and the following disclaimer in the 2.17 + * documentation and/or other materials provided with the distribution. 2.18 + * 2.19 + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2.20 + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2.21 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2.22 + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 2.23 + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2.24 + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2.25 + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2.26 + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2.27 + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2.28 + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2.29 + * POSSIBILITY OF SUCH DAMAGE. 2.30 + */ 2.31 + 2.32 +#include "cx/test.h" 2.33 +#include "util_allocator.h" 2.34 + 2.35 +#include "cx/buffer.h" 2.36 + 2.37 +static CX_TEST_SUBROUTINE(expect_default_flush_config, CxBuffer *buf) { 2.38 + CX_TEST_ASSERT(buf->flush_blkmax == 0); 2.39 + CX_TEST_ASSERT(buf->flush_blksize == 4096); 2.40 + CX_TEST_ASSERT(buf->flush_threshold == SIZE_MAX); 2.41 + CX_TEST_ASSERT(buf->flush_func == NULL); 2.42 + CX_TEST_ASSERT(buf->flush_target == NULL); 2.43 +} 2.44 + 2.45 +CX_TEST(test_buffer_init_wrap_space) { 2.46 + CxTestingAllocator talloc; 2.47 + cx_testing_allocator_init(&talloc); 2.48 + CxAllocator *alloc = &talloc.base; 2.49 + CX_TEST_DO { 2.50 + CxBuffer buf; 2.51 + void *space = cxMalloc(alloc, 16); 2.52 + cxBufferInit(&buf, space, 16, alloc, CX_BUFFER_DEFAULT); 2.53 + CX_TEST_CALL_SUBROUTINE(expect_default_flush_config, &buf); 2.54 + CX_TEST_ASSERT(buf.space == space); 2.55 + CX_TEST_ASSERT((buf.flags & CX_BUFFER_AUTO_EXTEND) == 0); 2.56 + CX_TEST_ASSERT((buf.flags & CX_BUFFER_FREE_CONTENTS) == 0); 2.57 + CX_TEST_ASSERT(buf.pos == 0); 2.58 + CX_TEST_ASSERT(buf.size == 0); 2.59 + CX_TEST_ASSERT(buf.capacity == 16); 2.60 + CX_TEST_ASSERT(buf.allocator == alloc); 2.61 + cxBufferDestroy(&buf); 2.62 + CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); 2.63 + cxFree(alloc, space); 2.64 + CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 2.65 + } 2.66 + cx_testing_allocator_destroy(&talloc); 2.67 +} 2.68 + 2.69 +CX_TEST(test_buffer_init_wrap_space_auto_extend) { 2.70 + CxTestingAllocator talloc; 2.71 + cx_testing_allocator_init(&talloc); 2.72 + CxAllocator *alloc = &talloc.base; 2.73 + CX_TEST_DO { 2.74 + CxBuffer buf; 2.75 + void *space = cxMalloc(alloc, 16); 2.76 + cxBufferInit(&buf, space, 16, alloc, CX_BUFFER_AUTO_EXTEND); 2.77 + CX_TEST_CALL_SUBROUTINE(expect_default_flush_config, &buf); 2.78 + CX_TEST_ASSERT(buf.space == space); 2.79 + CX_TEST_ASSERT((buf.flags & CX_BUFFER_AUTO_EXTEND) == CX_BUFFER_AUTO_EXTEND); 2.80 + CX_TEST_ASSERT((buf.flags & CX_BUFFER_FREE_CONTENTS) == 0); 2.81 + CX_TEST_ASSERT(buf.pos == 0); 2.82 + CX_TEST_ASSERT(buf.size == 0); 2.83 + CX_TEST_ASSERT(buf.capacity == 16); 2.84 + CX_TEST_ASSERT(buf.allocator == alloc); 2.85 + cxBufferDestroy(&buf); 2.86 + CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); 2.87 + cxFree(alloc, space); 2.88 + CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 2.89 + } 2.90 + cx_testing_allocator_destroy(&talloc); 2.91 +} 2.92 + 2.93 +CX_TEST(test_buffer_init_wrap_space_auto_free) { 2.94 + CxTestingAllocator talloc; 2.95 + cx_testing_allocator_init(&talloc); 2.96 + CxAllocator *alloc = &talloc.base; 2.97 + CX_TEST_DO { 2.98 + CxBuffer buf; 2.99 + void *space = cxMalloc(alloc, 16); 2.100 + cxBufferInit(&buf, space, 16, alloc, CX_BUFFER_FREE_CONTENTS); 2.101 + CX_TEST_CALL_SUBROUTINE(expect_default_flush_config, &buf); 2.102 + CX_TEST_ASSERT(buf.space == space); 2.103 + CX_TEST_ASSERT((buf.flags & CX_BUFFER_AUTO_EXTEND) == 0); 2.104 + CX_TEST_ASSERT((buf.flags & CX_BUFFER_FREE_CONTENTS) == CX_BUFFER_FREE_CONTENTS); 2.105 + CX_TEST_ASSERT(buf.pos == 0); 2.106 + CX_TEST_ASSERT(buf.size == 0); 2.107 + CX_TEST_ASSERT(buf.capacity == 16); 2.108 + CX_TEST_ASSERT(buf.allocator == alloc); 2.109 + CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); 2.110 + cxBufferDestroy(&buf); 2.111 + CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 2.112 + } 2.113 + cx_testing_allocator_destroy(&talloc); 2.114 +} 2.115 + 2.116 +CX_TEST(test_buffer_init_fresh_space) { 2.117 + CxTestingAllocator talloc; 2.118 + cx_testing_allocator_init(&talloc); 2.119 + CxAllocator *alloc = &talloc.base; 2.120 + CX_TEST_DO { 2.121 + CxBuffer buf; 2.122 + cxBufferInit(&buf, NULL, 8, alloc, CX_BUFFER_DEFAULT); 2.123 + CX_TEST_CALL_SUBROUTINE(expect_default_flush_config, &buf); 2.124 + CX_TEST_ASSERT(buf.space != NULL); 2.125 + CX_TEST_ASSERT((buf.flags & CX_BUFFER_AUTO_EXTEND) == 0); 2.126 + CX_TEST_ASSERT((buf.flags & CX_BUFFER_FREE_CONTENTS) == CX_BUFFER_FREE_CONTENTS); 2.127 + CX_TEST_ASSERT(buf.pos == 0); 2.128 + CX_TEST_ASSERT(buf.size == 0); 2.129 + CX_TEST_ASSERT(buf.capacity == 8); 2.130 + CX_TEST_ASSERT(buf.allocator == alloc); 2.131 + CX_TEST_ASSERT(!cx_testing_allocator_verify(&talloc)); // space is still allocated 2.132 + cxBufferDestroy(&buf); 2.133 + CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 2.134 + } 2.135 + cx_testing_allocator_destroy(&talloc); 2.136 +} 2.137 + 2.138 +CX_TEST(test_buffer_init_on_heap) { 2.139 + CxTestingAllocator talloc; 2.140 + cx_testing_allocator_init(&talloc); 2.141 + CxAllocator *alloc = &talloc.base; 2.142 + CX_TEST_DO { 2.143 + CxBuffer *buf; 2.144 + void *space = cxMalloc(alloc, 16); 2.145 + buf = cxBufferCreate(space, 16, alloc, CX_BUFFER_FREE_CONTENTS); 2.146 + CX_TEST_ASSERT(buf != NULL); 2.147 + CX_TEST_CALL_SUBROUTINE(expect_default_flush_config, buf); 2.148 + CX_TEST_ASSERT(buf->space == space); 2.149 + CX_TEST_ASSERT((buf->flags & CX_BUFFER_AUTO_EXTEND) == 0); 2.150 + CX_TEST_ASSERT((buf->flags & CX_BUFFER_FREE_CONTENTS) == CX_BUFFER_FREE_CONTENTS); 2.151 + CX_TEST_ASSERT(buf->pos == 0); 2.152 + CX_TEST_ASSERT(buf->size == 0); 2.153 + CX_TEST_ASSERT(buf->capacity == 16); 2.154 + CX_TEST_ASSERT(buf->allocator == alloc); 2.155 + cxBufferFree(buf); 2.156 + CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 2.157 + } 2.158 + cx_testing_allocator_destroy(&talloc); 2.159 +} 2.160 + 2.161 +CX_TEST(test_buffer_minimum_capacity_sufficient) { 2.162 + CxTestingAllocator talloc; 2.163 + cx_testing_allocator_init(&talloc); 2.164 + CxAllocator *alloc = &talloc.base; 2.165 + CX_TEST_DO { 2.166 + void *space = cxMalloc(alloc, 8); 2.167 + CxBuffer buf; 2.168 + cxBufferInit(&buf, space, 8, alloc, CX_BUFFER_FREE_CONTENTS); 2.169 + memcpy(space, "Testing", 8); 2.170 + buf.size = 8; 2.171 + cxBufferMinimumCapacity(&buf, 6); 2.172 + CX_TEST_ASSERT(buf.capacity == 8); 2.173 + CX_TEST_ASSERT(buf.size == 8); 2.174 + CX_TEST_ASSERT(memcmp(buf.space, "Testing", 8) == 0); 2.175 + cxBufferDestroy(&buf); 2.176 + CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 2.177 + } 2.178 + cx_testing_allocator_destroy(&talloc); 2.179 +} 2.180 + 2.181 +CX_TEST(test_buffer_minimum_capacity_extend) { 2.182 + CxTestingAllocator talloc; 2.183 + cx_testing_allocator_init(&talloc); 2.184 + CxAllocator *alloc = &talloc.base; 2.185 + CX_TEST_DO { 2.186 + void *space = cxMalloc(alloc, 8); 2.187 + CxBuffer buf; 2.188 + cxBufferInit(&buf, space, 8, alloc, CX_BUFFER_FREE_CONTENTS); // NO auto extend! 2.189 + memcpy(space, "Testing", 8); 2.190 + buf.size = 8; 2.191 + cxBufferMinimumCapacity(&buf, 16); 2.192 + CX_TEST_ASSERT(buf.capacity == 16); 2.193 + CX_TEST_ASSERT(buf.size == 8); 2.194 + CX_TEST_ASSERT(memcmp(buf.space, "Testing", 8) == 0); 2.195 + cxBufferDestroy(&buf); 2.196 + CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 2.197 + } 2.198 + cx_testing_allocator_destroy(&talloc); 2.199 +} 2.200 + 2.201 +CX_TEST(test_buffer_clear) { 2.202 + char space[16]; 2.203 + strcpy(space, "clear test"); 2.204 + CxBuffer buf; 2.205 + cxBufferInit(&buf, space, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 2.206 + CX_TEST_DO { 2.207 + CX_TEST_ASSERT(buf.size == 0); 2.208 + // only clear the used part of the buffer 2.209 + cxBufferClear(&buf); 2.210 + CX_TEST_ASSERT(0 == memcmp(space, "clear test", 10)); 2.211 + buf.size = 5; 2.212 + buf.pos = 3; 2.213 + cxBufferClear(&buf); 2.214 + CX_TEST_ASSERT(0 == memcmp(space, "\0\0\0\0\0 test", 10)); 2.215 + CX_TEST_ASSERT(buf.size == 0); 2.216 + CX_TEST_ASSERT(buf.pos == 0); 2.217 + } 2.218 + cxBufferDestroy(&buf); 2.219 +} 2.220 + 2.221 +CX_TEST(test_buffer_reset) { 2.222 + char space[16]; 2.223 + strcpy(space, "reset test"); 2.224 + CxBuffer buf; 2.225 + cxBufferInit(&buf, space, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 2.226 + CX_TEST_DO { 2.227 + buf.size = 5; 2.228 + buf.pos = 3; 2.229 + cxBufferReset(&buf); 2.230 + CX_TEST_ASSERT(0 == memcmp(space, "reset test", 10)); 2.231 + CX_TEST_ASSERT(buf.size == 0); 2.232 + CX_TEST_ASSERT(buf.pos == 0); 2.233 + } 2.234 + cxBufferDestroy(&buf); 2.235 +} 2.236 + 2.237 +CX_TEST(test_buffer_seek_set_zero) { 2.238 + CxBuffer buf; 2.239 + cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 2.240 + buf.size = 6; 2.241 + buf.pos = 3; 2.242 + CX_TEST_DO { 2.243 + int result = cxBufferSeek(&buf, 0, SEEK_SET); 2.244 + CX_TEST_ASSERT(result == 0); 2.245 + CX_TEST_ASSERT(buf.pos == 0); 2.246 + } 2.247 + cxBufferDestroy(&buf); 2.248 +} 2.249 + 2.250 +CX_TEST(test_buffer_seek_set_valid) { 2.251 + CxBuffer buf; 2.252 + cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 2.253 + buf.size = 6; 2.254 + buf.pos = 3; 2.255 + CX_TEST_DO { 2.256 + int result = cxBufferSeek(&buf, 5, SEEK_SET); 2.257 + CX_TEST_ASSERT(result == 0); 2.258 + CX_TEST_ASSERT(buf.pos == 5); 2.259 + } 2.260 + cxBufferDestroy(&buf); 2.261 +} 2.262 + 2.263 +CX_TEST(test_buffer_seek_set_invalid) { 2.264 + CxBuffer buf; 2.265 + cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 2.266 + buf.size = 6; 2.267 + buf.pos = 3; 2.268 + CX_TEST_DO { 2.269 + int result = cxBufferSeek(&buf, 6, SEEK_SET); 2.270 + CX_TEST_ASSERT(result != 0); 2.271 + CX_TEST_ASSERT(buf.pos == 3); 2.272 + } 2.273 + cxBufferDestroy(&buf); 2.274 +} 2.275 + 2.276 +CX_TEST(test_buffer_seek_cur_zero) { 2.277 + CxBuffer buf; 2.278 + cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 2.279 + buf.size = 6; 2.280 + buf.pos = 3; 2.281 + CX_TEST_DO { 2.282 + int result = cxBufferSeek(&buf, 0, SEEK_CUR); 2.283 + CX_TEST_ASSERT(result == 0); 2.284 + CX_TEST_ASSERT(buf.pos == 3); 2.285 + } 2.286 + cxBufferDestroy(&buf); 2.287 +} 2.288 + 2.289 +CX_TEST(test_buffer_seek_cur_valid_positive) { 2.290 + CxBuffer buf; 2.291 + cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 2.292 + buf.size = 6; 2.293 + buf.pos = 3; 2.294 + CX_TEST_DO { 2.295 + int result = cxBufferSeek(&buf, 2, SEEK_CUR); 2.296 + CX_TEST_ASSERT(result == 0); 2.297 + CX_TEST_ASSERT(buf.pos == 5); 2.298 + } 2.299 + cxBufferDestroy(&buf); 2.300 +} 2.301 + 2.302 +CX_TEST(test_buffer_seek_cur_valid_negative) { 2.303 + CxBuffer buf; 2.304 + cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 2.305 + buf.size = 6; 2.306 + buf.pos = 3; 2.307 + CX_TEST_DO { 2.308 + int result = cxBufferSeek(&buf, -3, SEEK_CUR); 2.309 + CX_TEST_ASSERT(result == 0); 2.310 + CX_TEST_ASSERT(buf.pos == 0); 2.311 + } 2.312 + cxBufferDestroy(&buf); 2.313 +} 2.314 + 2.315 +CX_TEST(test_buffer_seek_cur_invalid_positive) { 2.316 + CxBuffer buf; 2.317 + cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 2.318 + buf.size = 6; 2.319 + buf.pos = 3; 2.320 + CX_TEST_DO { 2.321 + int result = cxBufferSeek(&buf, 3, SEEK_CUR); 2.322 + CX_TEST_ASSERT(result != 0); 2.323 + CX_TEST_ASSERT(buf.pos == 3); 2.324 + } 2.325 + cxBufferDestroy(&buf); 2.326 +} 2.327 + 2.328 +CX_TEST(test_buffer_seek_cur_invalid_negative) { 2.329 + CxBuffer buf; 2.330 + cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 2.331 + buf.size = 6; 2.332 + buf.pos = 3; 2.333 + CX_TEST_DO { 2.334 + int result = cxBufferSeek(&buf, -4, SEEK_CUR); 2.335 + CX_TEST_ASSERT(result != 0); 2.336 + CX_TEST_ASSERT(buf.pos == 3); 2.337 + } 2.338 + cxBufferDestroy(&buf); 2.339 +} 2.340 + 2.341 +CX_TEST(test_buffer_seek_end_zero) { 2.342 + CxBuffer buf; 2.343 + cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 2.344 + buf.size = 6; 2.345 + buf.pos = 3; 2.346 + CX_TEST_DO { 2.347 + int result = cxBufferSeek(&buf, 0, SEEK_END); 2.348 + // the (past-the-)end position is always invalid 2.349 + CX_TEST_ASSERT(result != 0); 2.350 + CX_TEST_ASSERT(buf.pos == 3); 2.351 + } 2.352 + cxBufferDestroy(&buf); 2.353 +} 2.354 + 2.355 +CX_TEST(test_buffer_seek_end_valid) { 2.356 + CxBuffer buf; 2.357 + cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 2.358 + buf.size = 6; 2.359 + buf.pos = 3; 2.360 + CX_TEST_DO { 2.361 + int result = cxBufferSeek(&buf, -6, SEEK_END); 2.362 + CX_TEST_ASSERT(result == 0); 2.363 + CX_TEST_ASSERT(buf.pos == 0); 2.364 + } 2.365 + cxBufferDestroy(&buf); 2.366 +} 2.367 + 2.368 +CX_TEST(test_buffer_seek_end_invalid) { 2.369 + CxBuffer buf; 2.370 + cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 2.371 + buf.size = 6; 2.372 + buf.pos = 3; 2.373 + CX_TEST_DO { 2.374 + int result = cxBufferSeek(&buf, 1, SEEK_END); 2.375 + CX_TEST_ASSERT(result != 0); 2.376 + CX_TEST_ASSERT(buf.pos == 3); 2.377 + } 2.378 + cxBufferDestroy(&buf); 2.379 +} 2.380 + 2.381 +CX_TEST(test_buffer_seek_whence_invalid) { 2.382 + CxBuffer buf; 2.383 + cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 2.384 + buf.size = 6; 2.385 + buf.pos = 3; 2.386 + CX_TEST_DO { 2.387 + int result = cxBufferSeek(&buf, 2, 9000); 2.388 + CX_TEST_ASSERT(result != 0); 2.389 + CX_TEST_ASSERT(buf.size == 6); 2.390 + CX_TEST_ASSERT(buf.pos == 3); 2.391 + } 2.392 + cxBufferDestroy(&buf); 2.393 +} 2.394 + 2.395 +CxTestSuite *cx_test_suite_buffer(void) { 2.396 + CxTestSuite *suite = cx_test_suite_new("buffer"); 2.397 + 2.398 + cx_test_register(suite, test_buffer_init_wrap_space); 2.399 + cx_test_register(suite, test_buffer_init_wrap_space_auto_extend); 2.400 + cx_test_register(suite, test_buffer_init_wrap_space_auto_free); 2.401 + cx_test_register(suite, test_buffer_init_fresh_space); 2.402 + cx_test_register(suite, test_buffer_init_on_heap); 2.403 + cx_test_register(suite, test_buffer_minimum_capacity_sufficient); 2.404 + cx_test_register(suite, test_buffer_minimum_capacity_extend); 2.405 + cx_test_register(suite, test_buffer_clear); 2.406 + cx_test_register(suite, test_buffer_reset); 2.407 + cx_test_register(suite, test_buffer_seek_set_zero); 2.408 + cx_test_register(suite, test_buffer_seek_set_valid); 2.409 + cx_test_register(suite, test_buffer_seek_set_invalid); 2.410 + cx_test_register(suite, test_buffer_seek_cur_zero); 2.411 + cx_test_register(suite, test_buffer_seek_cur_valid_positive); 2.412 + cx_test_register(suite, test_buffer_seek_cur_valid_negative); 2.413 + cx_test_register(suite, test_buffer_seek_cur_invalid_positive); 2.414 + cx_test_register(suite, test_buffer_seek_cur_invalid_negative); 2.415 + cx_test_register(suite, test_buffer_seek_end_zero); 2.416 + cx_test_register(suite, test_buffer_seek_end_valid); 2.417 + cx_test_register(suite, test_buffer_seek_end_invalid); 2.418 + cx_test_register(suite, test_buffer_seek_whence_invalid); 2.419 + 2.420 + return suite; 2.421 +}
3.1 --- a/tests/test_buffer.cpp Mon Jan 01 15:33:20 2024 +0100 3.2 +++ b/tests/test_buffer.cpp Mon Jan 01 16:42:37 2024 +0100 3.3 @@ -34,7 +34,7 @@ 3.4 class BufferFixture : public ::testing::Test { 3.5 protected: 3.6 void SetUp() override { 3.7 - cxBufferInit(&buf, nullptr, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 3.8 + cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 3.9 buf.size = 6; 3.10 buf.pos = 3; 3.11 } 3.12 @@ -46,110 +46,11 @@ 3.13 CxBuffer buf{}; 3.14 }; 3.15 3.16 -static void expect_default_flush_config(CxBuffer *buf) { 3.17 - EXPECT_EQ(buf->flush_blkmax, 0); 3.18 - EXPECT_EQ(buf->flush_blksize, 4096); 3.19 - EXPECT_EQ(buf->flush_threshold, SIZE_MAX); 3.20 - EXPECT_EQ(buf->flush_func, nullptr); 3.21 - EXPECT_EQ(buf->flush_target, nullptr); 3.22 -} 3.23 - 3.24 -TEST(BufferInit, WrapSpace) { 3.25 - CxTestingAllocator alloc; 3.26 - CxBuffer buf; 3.27 - void *space = cxMalloc(&alloc, 16); 3.28 - cxBufferInit(&buf, space, 16, &alloc, CX_BUFFER_DEFAULT); 3.29 - expect_default_flush_config(&buf); 3.30 - EXPECT_EQ(buf.space, space); 3.31 - EXPECT_EQ(buf.flags & CX_BUFFER_AUTO_EXTEND, 0); 3.32 - EXPECT_EQ(buf.flags & CX_BUFFER_FREE_CONTENTS, 0); 3.33 - EXPECT_EQ(buf.pos, 0); 3.34 - EXPECT_EQ(buf.size, 0); 3.35 - EXPECT_EQ(buf.capacity, 16); 3.36 - EXPECT_EQ(buf.allocator, &alloc); 3.37 - cxBufferDestroy(&buf); 3.38 - EXPECT_FALSE(alloc.verify()); 3.39 - cxFree(&alloc, space); 3.40 - EXPECT_TRUE(alloc.verify()); 3.41 -} 3.42 - 3.43 -TEST(BufferInit, WrapSpaceAutoExtend) { 3.44 - CxTestingAllocator alloc; 3.45 - CxBuffer buf; 3.46 - void *space = cxMalloc(&alloc, 16); 3.47 - cxBufferInit(&buf, space, 16, &alloc, CX_BUFFER_AUTO_EXTEND); 3.48 - expect_default_flush_config(&buf); 3.49 - EXPECT_EQ(buf.space, space); 3.50 - EXPECT_EQ(buf.flags & CX_BUFFER_AUTO_EXTEND, CX_BUFFER_AUTO_EXTEND); 3.51 - EXPECT_EQ(buf.flags & CX_BUFFER_FREE_CONTENTS, 0); 3.52 - EXPECT_EQ(buf.pos, 0); 3.53 - EXPECT_EQ(buf.size, 0); 3.54 - EXPECT_EQ(buf.capacity, 16); 3.55 - EXPECT_EQ(buf.allocator, &alloc); 3.56 - cxBufferDestroy(&buf); 3.57 - EXPECT_FALSE(alloc.verify()); 3.58 - cxFree(&alloc, space); 3.59 - EXPECT_TRUE(alloc.verify()); 3.60 -} 3.61 - 3.62 -TEST(BufferInit, WrapSpaceAutoFree) { 3.63 - CxTestingAllocator alloc; 3.64 - CxBuffer buf; 3.65 - void *space = cxMalloc(&alloc, 16); 3.66 - cxBufferInit(&buf, space, 16, &alloc, CX_BUFFER_FREE_CONTENTS); 3.67 - expect_default_flush_config(&buf); 3.68 - EXPECT_EQ(buf.space, space); 3.69 - EXPECT_EQ(buf.flags & CX_BUFFER_AUTO_EXTEND, 0); 3.70 - EXPECT_EQ(buf.flags & CX_BUFFER_FREE_CONTENTS, CX_BUFFER_FREE_CONTENTS); 3.71 - EXPECT_EQ(buf.pos, 0); 3.72 - EXPECT_EQ(buf.size, 0); 3.73 - EXPECT_EQ(buf.capacity, 16); 3.74 - EXPECT_EQ(buf.allocator, &alloc); 3.75 - EXPECT_FALSE(alloc.verify()); 3.76 - cxBufferDestroy(&buf); 3.77 - EXPECT_TRUE(alloc.verify()); 3.78 -} 3.79 - 3.80 -TEST(BufferInit, FreshSpace) { 3.81 - CxTestingAllocator alloc; 3.82 - CxBuffer buf; 3.83 - cxBufferInit(&buf, nullptr, 8, &alloc, CX_BUFFER_DEFAULT); 3.84 - expect_default_flush_config(&buf); 3.85 - EXPECT_NE(buf.space, nullptr); 3.86 - EXPECT_EQ(buf.flags & CX_BUFFER_AUTO_EXTEND, 0); 3.87 - EXPECT_EQ(buf.flags & CX_BUFFER_FREE_CONTENTS, CX_BUFFER_FREE_CONTENTS); 3.88 - EXPECT_EQ(buf.pos, 0); 3.89 - EXPECT_EQ(buf.size, 0); 3.90 - EXPECT_EQ(buf.capacity, 8); 3.91 - EXPECT_EQ(buf.allocator, &alloc); 3.92 - EXPECT_FALSE(alloc.verify()); // space is still allocated 3.93 - cxBufferDestroy(&buf); 3.94 - EXPECT_TRUE(alloc.verify()); 3.95 -} 3.96 - 3.97 -TEST(BufferInit, OnHeap) { 3.98 - CxTestingAllocator alloc; 3.99 - CxBuffer *buf; 3.100 - void *space = cxMalloc(&alloc, 16); 3.101 - buf = cxBufferCreate(space, 16, &alloc, CX_BUFFER_FREE_CONTENTS); 3.102 - EXPECT_NE(buf, nullptr); 3.103 - expect_default_flush_config(buf); 3.104 - EXPECT_EQ(buf->space, space); 3.105 - EXPECT_EQ(buf->flags & CX_BUFFER_AUTO_EXTEND, 0); 3.106 - EXPECT_EQ(buf->flags & CX_BUFFER_FREE_CONTENTS, CX_BUFFER_FREE_CONTENTS); 3.107 - EXPECT_EQ(buf->pos, 0); 3.108 - EXPECT_EQ(buf->size, 0); 3.109 - EXPECT_EQ(buf->capacity, 16); 3.110 - EXPECT_EQ(buf->allocator, &alloc); 3.111 - cxBufferFree(buf); 3.112 - EXPECT_TRUE(alloc.verify()); 3.113 -} 3.114 - 3.115 class BufferShiftFixture : public ::testing::Test { 3.116 protected: 3.117 void SetUp() override { 3.118 - ASSERT_TRUE(alloc.verify()); 3.119 - cxBufferInit(&buf, nullptr, 16, &alloc, CX_BUFFER_DEFAULT); 3.120 + CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 3.121 + cxBufferInit(&buf, NULL, 16, &alloc, CX_BUFFER_DEFAULT); 3.122 memcpy(buf.space, "test____________", 16); 3.123 buf.capacity = 8; // purposely pretend that the buffer has less capacity s.t. we can test beyond the range 3.124 buf.pos = 4; 3.125 @@ -158,7 +59,7 @@ 3.126 3.127 void TearDown() override { 3.128 cxBufferDestroy(&buf); 3.129 - EXPECT_TRUE(alloc.verify()); 3.130 + CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); 3.131 } 3.132 3.133 CxTestingAllocator alloc; 3.134 @@ -169,193 +70,128 @@ 3.135 }; 3.136 3.137 TEST_F(BufferShiftLeft, Zero) { 3.138 - ASSERT_EQ(buf.pos, 4); 3.139 - ASSERT_EQ(buf.size, 4); 3.140 + CX_TEST_ASSERT(buf.pos == 4); 3.141 + CX_TEST_ASSERT(buf.size == 4); 3.142 int ret = cxBufferShiftLeft(&buf, 0); 3.143 - EXPECT_EQ(ret, 0); 3.144 - EXPECT_EQ(buf.pos, 4); 3.145 - EXPECT_EQ(buf.size, 4); 3.146 - EXPECT_TRUE(memcmp(buf.space, "test________", 8) == 0); 3.147 + CX_TEST_ASSERT(ret == 0); 3.148 + CX_TEST_ASSERT(buf.pos == 4); 3.149 + CX_TEST_ASSERT(buf.size == 4); 3.150 + CX_TEST_ASSERT(memcmp(buf.space, "test________", 8) == 0); 3.151 } 3.152 3.153 TEST_F(BufferShiftLeft, ZeroOffsetInterface) { 3.154 - ASSERT_EQ(buf.pos, 4); 3.155 - ASSERT_EQ(buf.size, 4); 3.156 + CX_TEST_ASSERT(buf.pos == 4); 3.157 + CX_TEST_ASSERT(buf.size == 4); 3.158 int ret = cxBufferShift(&buf, -0); 3.159 - EXPECT_EQ(ret, 0); 3.160 - EXPECT_EQ(buf.pos, 4); 3.161 - EXPECT_EQ(buf.size, 4); 3.162 - EXPECT_TRUE(memcmp(buf.space, "test________", 8) == 0); 3.163 + CX_TEST_ASSERT(ret == 0); 3.164 + CX_TEST_ASSERT(buf.pos == 4); 3.165 + CX_TEST_ASSERT(buf.size == 4); 3.166 + CX_TEST_ASSERT(memcmp(buf.space, "test________", 8) == 0); 3.167 } 3.168 3.169 TEST_F(BufferShiftLeft, Standard) { 3.170 - ASSERT_EQ(buf.pos, 4); 3.171 - ASSERT_EQ(buf.size, 4); 3.172 + CX_TEST_ASSERT(buf.pos == 4); 3.173 + CX_TEST_ASSERT(buf.size == 4); 3.174 int ret = cxBufferShiftLeft(&buf, 2); 3.175 - EXPECT_EQ(ret, 0); 3.176 - EXPECT_EQ(buf.pos, 2); 3.177 - EXPECT_EQ(buf.size, 2); 3.178 - EXPECT_TRUE(memcmp(buf.space, "stst________", 8) == 0); 3.179 + CX_TEST_ASSERT(ret == 0); 3.180 + CX_TEST_ASSERT(buf.pos == 2); 3.181 + CX_TEST_ASSERT(buf.size == 2); 3.182 + CX_TEST_ASSERT(memcmp(buf.space, "stst________", 8) == 0); 3.183 } 3.184 3.185 TEST_F(BufferShiftLeft, Overshift) { 3.186 ASSERT_LT(buf.pos, 6); 3.187 ASSERT_LT(buf.size, 6); 3.188 int ret = cxBufferShiftLeft(&buf, 6); 3.189 - EXPECT_EQ(ret, 0); 3.190 - EXPECT_EQ(buf.pos, 0); 3.191 - EXPECT_EQ(buf.size, 0); 3.192 - EXPECT_TRUE(memcmp(buf.space, "test________", 8) == 0); 3.193 + CX_TEST_ASSERT(ret == 0); 3.194 + CX_TEST_ASSERT(buf.pos == 0); 3.195 + CX_TEST_ASSERT(buf.size == 0); 3.196 + CX_TEST_ASSERT(memcmp(buf.space, "test________", 8) == 0); 3.197 } 3.198 3.199 TEST_F(BufferShiftLeft, OvershiftPosOnly) { 3.200 buf.pos = 2; 3.201 - ASSERT_EQ(buf.size, 4); 3.202 + CX_TEST_ASSERT(buf.size == 4); 3.203 int ret = cxBufferShiftLeft(&buf, 3); 3.204 - EXPECT_EQ(ret, 0); 3.205 - EXPECT_EQ(buf.pos, 0); 3.206 - EXPECT_EQ(buf.size, 1); 3.207 - EXPECT_TRUE(memcmp(buf.space, "test________", 8) == 0); 3.208 + CX_TEST_ASSERT(ret == 0); 3.209 + CX_TEST_ASSERT(buf.pos == 0); 3.210 + CX_TEST_ASSERT(buf.size == 1); 3.211 + CX_TEST_ASSERT(memcmp(buf.space, "test________", 8) == 0); 3.212 } 3.213 3.214 TEST_F(BufferShiftLeft, OffsetInterface) { 3.215 buf.pos = 3; 3.216 - ASSERT_EQ(buf.size, 4); 3.217 + CX_TEST_ASSERT(buf.size == 4); 3.218 int ret = cxBufferShift(&buf, -2); 3.219 - EXPECT_EQ(ret, 0); 3.220 - EXPECT_EQ(buf.pos, 1); 3.221 - EXPECT_EQ(buf.size, 2); 3.222 - EXPECT_TRUE(memcmp(buf.space, "stst________", 8) == 0); 3.223 + CX_TEST_ASSERT(ret == 0); 3.224 + CX_TEST_ASSERT(buf.pos == 1); 3.225 + CX_TEST_ASSERT(buf.size == 2); 3.226 + CX_TEST_ASSERT(memcmp(buf.space, "stst________", 8) == 0); 3.227 } 3.228 3.229 -class BufferShiftRight : public BufferShiftFixture { 3.230 -}; 3.231 - 3.232 TEST_F(BufferShiftRight, Zero) { 3.233 - ASSERT_EQ(buf.pos, 4); 3.234 - ASSERT_EQ(buf.size, 4); 3.235 + CX_TEST_ASSERT(buf.pos == 4); 3.236 + CX_TEST_ASSERT(buf.size == 4); 3.237 int ret = cxBufferShiftRight(&buf, 0); 3.238 - EXPECT_EQ(ret, 0); 3.239 - EXPECT_EQ(buf.pos, 4); 3.240 - EXPECT_EQ(buf.size, 4); 3.241 - EXPECT_TRUE(memcmp(buf.space, "test________", 8) == 0); 3.242 + CX_TEST_ASSERT(ret == 0); 3.243 + CX_TEST_ASSERT(buf.pos == 4); 3.244 + CX_TEST_ASSERT(buf.size == 4); 3.245 + CX_TEST_ASSERT(memcmp(buf.space, "test________", 8) == 0); 3.246 } 3.247 3.248 TEST_F(BufferShiftRight, ZeroOffsetInterface) { 3.249 - ASSERT_EQ(buf.pos, 4); 3.250 - ASSERT_EQ(buf.size, 4); 3.251 + CX_TEST_ASSERT(buf.pos == 4); 3.252 + CX_TEST_ASSERT(buf.size == 4); 3.253 int ret = cxBufferShift(&buf, +0); 3.254 - EXPECT_EQ(ret, 0); 3.255 - EXPECT_EQ(buf.pos, 4); 3.256 - EXPECT_EQ(buf.size, 4); 3.257 - EXPECT_TRUE(memcmp(buf.space, "test________", 8) == 0); 3.258 + CX_TEST_ASSERT(ret == 0); 3.259 + CX_TEST_ASSERT(buf.pos == 4); 3.260 + CX_TEST_ASSERT(buf.size == 4); 3.261 + CX_TEST_ASSERT(memcmp(buf.space, "test________", 8) == 0); 3.262 } 3.263 3.264 TEST_F(BufferShiftRight, Standard) { 3.265 - ASSERT_EQ(buf.pos, 4); 3.266 - ASSERT_EQ(buf.size, 4); 3.267 + CX_TEST_ASSERT(buf.pos == 4); 3.268 + CX_TEST_ASSERT(buf.size == 4); 3.269 int ret = cxBufferShiftRight(&buf, 3); 3.270 - EXPECT_EQ(ret, 0); 3.271 - EXPECT_EQ(buf.pos, 7); 3.272 - EXPECT_EQ(buf.size, 7); 3.273 - EXPECT_TRUE(memcmp(buf.space, "testest_____", 8) == 0); 3.274 + CX_TEST_ASSERT(ret == 0); 3.275 + CX_TEST_ASSERT(buf.pos == 7); 3.276 + CX_TEST_ASSERT(buf.size == 7); 3.277 + CX_TEST_ASSERT(memcmp(buf.space, "testest_____", 8) == 0); 3.278 } 3.279 3.280 TEST_F(BufferShiftRight, OvershiftDiscard) { 3.281 - ASSERT_EQ(buf.pos, 4); 3.282 - ASSERT_EQ(buf.size, 4); 3.283 - ASSERT_EQ(buf.capacity, 8); 3.284 + CX_TEST_ASSERT(buf.pos == 4); 3.285 + CX_TEST_ASSERT(buf.size == 4); 3.286 + CX_TEST_ASSERT(buf.capacity == 8); 3.287 int ret = cxBufferShiftRight(&buf, 6); 3.288 - EXPECT_EQ(ret, 0); 3.289 - EXPECT_EQ(buf.pos, 8); 3.290 - EXPECT_EQ(buf.size, 8); 3.291 - EXPECT_EQ(buf.capacity, 8); 3.292 - EXPECT_TRUE(memcmp(buf.space, "test__te____", 8) == 0); 3.293 + CX_TEST_ASSERT(ret == 0); 3.294 + CX_TEST_ASSERT(buf.pos == 8); 3.295 + CX_TEST_ASSERT(buf.size == 8); 3.296 + CX_TEST_ASSERT(buf.capacity == 8); 3.297 + CX_TEST_ASSERT(memcmp(buf.space, "test__te____", 8) == 0); 3.298 } 3.299 3.300 TEST_F(BufferShiftRight, OvershiftExtend) { 3.301 - ASSERT_EQ(buf.pos, 4); 3.302 - ASSERT_EQ(buf.size, 4); 3.303 - ASSERT_EQ(buf.capacity, 8); 3.304 + CX_TEST_ASSERT(buf.pos == 4); 3.305 + CX_TEST_ASSERT(buf.size == 4); 3.306 + CX_TEST_ASSERT(buf.capacity == 8); 3.307 buf.flags |= CX_BUFFER_AUTO_EXTEND; 3.308 int ret = cxBufferShiftRight(&buf, 6); 3.309 - EXPECT_EQ(ret, 0); 3.310 - EXPECT_EQ(buf.pos, 10); 3.311 - EXPECT_EQ(buf.size, 10); 3.312 + CX_TEST_ASSERT(ret == 0); 3.313 + CX_TEST_ASSERT(buf.pos == 10); 3.314 + CX_TEST_ASSERT(buf.size == 10); 3.315 EXPECT_GE(buf.capacity, 10); 3.316 - EXPECT_TRUE(memcmp(buf.space, "test__test__", 8) == 0); 3.317 + CX_TEST_ASSERT(memcmp(buf.space, "test__test__", 8) == 0); 3.318 } 3.319 3.320 TEST_F(BufferShiftRight, OffsetInterface) { 3.321 buf.pos = 3; 3.322 - ASSERT_EQ(buf.size, 4); 3.323 + CX_TEST_ASSERT(buf.size == 4); 3.324 int ret = cxBufferShift(&buf, 2); 3.325 - EXPECT_EQ(ret, 0); 3.326 - EXPECT_EQ(buf.pos, 5); 3.327 - EXPECT_EQ(buf.size, 6); 3.328 - EXPECT_TRUE(memcmp(buf.space, "tetest______", 8) == 0); 3.329 -} 3.330 - 3.331 -TEST(BufferMinimumCapacity, Sufficient) { 3.332 - CxTestingAllocator alloc; 3.333 - auto space = cxMalloc(&alloc, 8); 3.334 - CxBuffer buf; 3.335 - cxBufferInit(&buf, space, 8, &alloc, CX_BUFFER_FREE_CONTENTS); 3.336 - memcpy(space, "Testing", 8); 3.337 - buf.size = 8; 3.338 - cxBufferMinimumCapacity(&buf, 6); 3.339 - EXPECT_EQ(buf.capacity, 8); 3.340 - EXPECT_EQ(buf.size, 8); 3.341 - EXPECT_TRUE(memcmp(buf.space, "Testing", 8) == 0); 3.342 - cxBufferDestroy(&buf); 3.343 - EXPECT_TRUE(alloc.verify()); 3.344 -} 3.345 - 3.346 -TEST(BufferMinimumCapacity, Extend) { 3.347 - CxTestingAllocator alloc; 3.348 - auto space = cxMalloc(&alloc, 8); 3.349 - CxBuffer buf; 3.350 - cxBufferInit(&buf, space, 8, &alloc, CX_BUFFER_FREE_CONTENTS); // NO auto extend! 3.351 - memcpy(space, "Testing", 8); 3.352 - buf.size = 8; 3.353 - cxBufferMinimumCapacity(&buf, 16); 3.354 - EXPECT_EQ(buf.capacity, 16); 3.355 - EXPECT_EQ(buf.size, 8); 3.356 - EXPECT_TRUE(memcmp(buf.space, "Testing", 8) == 0); 3.357 - cxBufferDestroy(&buf); 3.358 - EXPECT_TRUE(alloc.verify()); 3.359 -} 3.360 - 3.361 -TEST(BufferClear, Test) { 3.362 - char space[16]; 3.363 - strcpy(space, "clear test"); 3.364 - CxBuffer buf; 3.365 - cxBufferInit(&buf, space, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 3.366 - ASSERT_EQ(buf.size, 0); 3.367 - // only clear the used part of the buffer 3.368 - cxBufferClear(&buf); 3.369 - EXPECT_EQ(memcmp(space, "clear test", 10), 0); 3.370 - buf.size = 5; 3.371 - buf.pos = 3; 3.372 - cxBufferClear(&buf); 3.373 - EXPECT_EQ(memcmp(space, "\0\0\0\0\0 test", 10), 0); 3.374 - EXPECT_EQ(buf.size, 0); 3.375 - EXPECT_EQ(buf.pos, 0); 3.376 - cxBufferDestroy(&buf); 3.377 -} 3.378 - 3.379 -TEST(BufferReset, Test) { 3.380 - char space[16]; 3.381 - strcpy(space, "reset test"); 3.382 - CxBuffer buf; 3.383 - cxBufferInit(&buf, space, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 3.384 - buf.size = 5; 3.385 - buf.pos = 3; 3.386 - cxBufferReset(&buf); 3.387 - EXPECT_EQ(memcmp(space, "reset test", 10), 0); 3.388 - EXPECT_EQ(buf.size, 0); 3.389 - EXPECT_EQ(buf.pos, 0); 3.390 - cxBufferDestroy(&buf); 3.391 + CX_TEST_ASSERT(ret == 0); 3.392 + CX_TEST_ASSERT(buf.pos == 5); 3.393 + CX_TEST_ASSERT(buf.size == 6); 3.394 + CX_TEST_ASSERT(memcmp(buf.space, "tetest______", 8) == 0); 3.395 } 3.396 3.397 class BufferWrite : public ::testing::Test { 3.398 @@ -363,8 +199,8 @@ 3.399 CxBuffer buf{}, target{}; 3.400 3.401 void SetUp() override { 3.402 - cxBufferInit(&target, nullptr, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND); 3.403 - cxBufferInit(&buf, nullptr, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 3.404 + cxBufferInit(&target, NULL, 16, cxDefaultAllocator, CX_BUFFER_AUTO_EXTEND); 3.405 + cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 3.406 buf.capacity = 8; // artificially reduce capacity to check OOB writes 3.407 memset(buf.space, 0, 16); 3.408 memcpy(buf.space, "prep", 4); 3.409 @@ -402,221 +238,221 @@ 3.410 3.411 TEST_F(BufferWrite, SizeOneFit) { 3.412 const char *data = "test"; 3.413 - ASSERT_EQ(buf.capacity, 8); 3.414 - ASSERT_EQ(buf.pos, 4); 3.415 - ASSERT_EQ(buf.size, 4); 3.416 + CX_TEST_ASSERT(buf.capacity == 8); 3.417 + CX_TEST_ASSERT(buf.pos == 4); 3.418 + CX_TEST_ASSERT(buf.size == 4); 3.419 size_t written = cxBufferWrite(data, 1, 4, &buf); 3.420 - EXPECT_EQ(written, 4); 3.421 - EXPECT_EQ(buf.size, 8); 3.422 - EXPECT_EQ(buf.pos, 8); 3.423 - EXPECT_EQ(buf.capacity, 8); 3.424 + CX_TEST_ASSERT(written == 4); 3.425 + CX_TEST_ASSERT(buf.size == 8); 3.426 + CX_TEST_ASSERT(buf.pos == 8); 3.427 + CX_TEST_ASSERT(buf.capacity == 8); 3.428 EXPECT_EQ(memcmp(buf.space, "preptest", 8), 0); 3.429 } 3.430 3.431 TEST_F(BufferWrite, SizeOneDiscard) { 3.432 const char *data = "testing"; 3.433 - ASSERT_EQ(buf.capacity, 8); 3.434 - ASSERT_EQ(buf.pos, 4); 3.435 - ASSERT_EQ(buf.size, 4); 3.436 + CX_TEST_ASSERT(buf.capacity == 8); 3.437 + CX_TEST_ASSERT(buf.pos == 4); 3.438 + CX_TEST_ASSERT(buf.size == 4); 3.439 size_t written = cxBufferWrite(data, 1, 7, &buf); 3.440 - EXPECT_EQ(written, 4); 3.441 - EXPECT_EQ(buf.size, 8); 3.442 - EXPECT_EQ(buf.pos, 8); 3.443 - EXPECT_EQ(buf.capacity, 8); 3.444 + CX_TEST_ASSERT(written == 4); 3.445 + CX_TEST_ASSERT(buf.size == 8); 3.446 + CX_TEST_ASSERT(buf.pos == 8); 3.447 + CX_TEST_ASSERT(buf.capacity == 8); 3.448 EXPECT_EQ(memcmp(buf.space, "preptest\0", 9), 0); 3.449 } 3.450 3.451 TEST_F(BufferWrite, SizeOneExtend) { 3.452 buf.flags |= CX_BUFFER_AUTO_EXTEND; 3.453 const char *data = "testing"; 3.454 - ASSERT_EQ(buf.capacity, 8); 3.455 - ASSERT_EQ(buf.pos, 4); 3.456 - ASSERT_EQ(buf.size, 4); 3.457 + CX_TEST_ASSERT(buf.capacity == 8); 3.458 + CX_TEST_ASSERT(buf.pos == 4); 3.459 + CX_TEST_ASSERT(buf.size == 4); 3.460 size_t written = cxBufferWrite(data, 1, 7, &buf); 3.461 - EXPECT_EQ(written, 7); 3.462 - EXPECT_EQ(buf.size, 11); 3.463 - EXPECT_EQ(buf.pos, 11); 3.464 + CX_TEST_ASSERT(written == 7); 3.465 + CX_TEST_ASSERT(buf.size == 11); 3.466 + CX_TEST_ASSERT(buf.pos == 11); 3.467 EXPECT_GE(buf.capacity, 11); 3.468 EXPECT_EQ(memcmp(buf.space, "preptesting", 11), 0); 3.469 } 3.470 3.471 TEST_F(BufferWrite, MultibyteFit) { 3.472 const char *data = "test"; 3.473 - ASSERT_EQ(buf.capacity, 8); 3.474 - ASSERT_EQ(buf.pos, 4); 3.475 - ASSERT_EQ(buf.size, 4); 3.476 + CX_TEST_ASSERT(buf.capacity == 8); 3.477 + CX_TEST_ASSERT(buf.pos == 4); 3.478 + CX_TEST_ASSERT(buf.size == 4); 3.479 size_t written = cxBufferWrite(data, 2, 2, &buf); 3.480 - EXPECT_EQ(written, 2); 3.481 - EXPECT_EQ(buf.size, 8); 3.482 - EXPECT_EQ(buf.pos, 8); 3.483 - EXPECT_EQ(buf.capacity, 8); 3.484 + CX_TEST_ASSERT(written == 2); 3.485 + CX_TEST_ASSERT(buf.size == 8); 3.486 + CX_TEST_ASSERT(buf.pos == 8); 3.487 + CX_TEST_ASSERT(buf.capacity == 8); 3.488 EXPECT_EQ(memcmp(buf.space, "preptest", 8), 0); 3.489 } 3.490 3.491 TEST_F(BufferWrite, MultibyteDiscard) { 3.492 const char *data = "testing"; 3.493 - ASSERT_EQ(buf.capacity, 8); 3.494 - ASSERT_EQ(buf.size, 4); 3.495 + CX_TEST_ASSERT(buf.capacity == 8); 3.496 + CX_TEST_ASSERT(buf.size == 4); 3.497 buf.pos = 3; 3.498 size_t written = cxBufferWrite(data, 2, 4, &buf); 3.499 // remember: whole elements are discarded if they do not fit 3.500 - EXPECT_EQ(written, 2); 3.501 - EXPECT_EQ(buf.size, 7); 3.502 - EXPECT_EQ(buf.pos, 7); 3.503 - EXPECT_EQ(buf.capacity, 8); 3.504 + CX_TEST_ASSERT(written == 2); 3.505 + CX_TEST_ASSERT(buf.size == 7); 3.506 + CX_TEST_ASSERT(buf.pos == 7); 3.507 + CX_TEST_ASSERT(buf.capacity == 8); 3.508 EXPECT_EQ(memcmp(buf.space, "pretest\0", 8), 0); 3.509 } 3.510 3.511 TEST_F(BufferWrite, MultibyteExtend) { 3.512 buf.flags |= CX_BUFFER_AUTO_EXTEND; 3.513 const char *data = "tester"; 3.514 - ASSERT_EQ(buf.capacity, 8); 3.515 - ASSERT_EQ(buf.size, 4); 3.516 + CX_TEST_ASSERT(buf.capacity == 8); 3.517 + CX_TEST_ASSERT(buf.size == 4); 3.518 buf.pos = 3; 3.519 size_t written = cxBufferWrite(data, 2, 3, &buf); 3.520 // remember: whole elements are discarded if they do not fit 3.521 - EXPECT_EQ(written, 3); 3.522 - EXPECT_EQ(buf.size, 9); 3.523 - EXPECT_EQ(buf.pos, 9); 3.524 + CX_TEST_ASSERT(written == 3); 3.525 + CX_TEST_ASSERT(buf.size == 9); 3.526 + CX_TEST_ASSERT(buf.pos == 9); 3.527 EXPECT_GE(buf.capacity, 9); 3.528 EXPECT_EQ(memcmp(buf.space, "pretester", 9), 0); 3.529 } 3.530 3.531 TEST_F(BufferWrite, PutcWrapperFit) { 3.532 - ASSERT_EQ(buf.capacity, 8); 3.533 - ASSERT_EQ(buf.pos, 4); 3.534 - ASSERT_EQ(buf.size, 4); 3.535 + CX_TEST_ASSERT(buf.capacity == 8); 3.536 + CX_TEST_ASSERT(buf.pos == 4); 3.537 + CX_TEST_ASSERT(buf.size == 4); 3.538 int c = cxBufferPut(&buf, 0x200 | 'a'); 3.539 - EXPECT_EQ(c, 'a'); 3.540 - EXPECT_EQ(buf.size, 5); 3.541 - EXPECT_EQ(buf.pos, 5); 3.542 - EXPECT_EQ(buf.capacity, 8); 3.543 + CX_TEST_ASSERT(c == 'a'); 3.544 + CX_TEST_ASSERT(buf.size == 5); 3.545 + CX_TEST_ASSERT(buf.pos == 5); 3.546 + CX_TEST_ASSERT(buf.capacity == 8); 3.547 EXPECT_EQ(memcmp(buf.space, "prepa\0", 6), 0); 3.548 } 3.549 3.550 TEST_F(BufferWrite, PutcWrapperDiscard) { 3.551 - ASSERT_EQ(buf.capacity, 8); 3.552 - ASSERT_EQ(buf.size, 4); 3.553 + CX_TEST_ASSERT(buf.capacity == 8); 3.554 + CX_TEST_ASSERT(buf.size == 4); 3.555 buf.pos = 8; 3.556 int c = cxBufferPut(&buf, 0x200 | 'a'); 3.557 - EXPECT_EQ(c, EOF); 3.558 - EXPECT_EQ(buf.size, 4); 3.559 - EXPECT_EQ(buf.pos, 8); 3.560 - EXPECT_EQ(buf.capacity, 8); 3.561 + CX_TEST_ASSERT(c == EOF); 3.562 + CX_TEST_ASSERT(buf.size == 4); 3.563 + CX_TEST_ASSERT(buf.pos == 8); 3.564 + CX_TEST_ASSERT(buf.capacity == 8); 3.565 EXPECT_EQ(memcmp(buf.space, "prep\0\0\0\0\0", 9), 0); 3.566 } 3.567 3.568 TEST_F(BufferWrite, PutcWrapperExtend) { 3.569 buf.flags |= CX_BUFFER_AUTO_EXTEND; 3.570 - ASSERT_EQ(buf.capacity, 8); 3.571 - ASSERT_EQ(buf.size, 4); 3.572 + CX_TEST_ASSERT(buf.capacity == 8); 3.573 + CX_TEST_ASSERT(buf.size == 4); 3.574 buf.pos = 8; 3.575 int c = cxBufferPut(&buf, 0x200 | 'a'); 3.576 - EXPECT_EQ(c, 'a'); 3.577 - EXPECT_EQ(buf.size, 9); 3.578 - EXPECT_EQ(buf.pos, 9); 3.579 + CX_TEST_ASSERT(c == 'a'); 3.580 + CX_TEST_ASSERT(buf.size == 9); 3.581 + CX_TEST_ASSERT(buf.pos == 9); 3.582 EXPECT_GE(buf.capacity, 9); 3.583 EXPECT_EQ(memcmp(buf.space, "prep\0\0\0\0a", 9), 0); 3.584 } 3.585 3.586 TEST_F(BufferWrite, PutStringWrapperFit) { 3.587 const char *data = "test"; 3.588 - ASSERT_EQ(buf.capacity, 8); 3.589 - ASSERT_EQ(buf.pos, 4); 3.590 - ASSERT_EQ(buf.size, 4); 3.591 + CX_TEST_ASSERT(buf.capacity == 8); 3.592 + CX_TEST_ASSERT(buf.pos == 4); 3.593 + CX_TEST_ASSERT(buf.size == 4); 3.594 size_t written = cxBufferPutString(&buf, data); 3.595 - EXPECT_EQ(written, 4); 3.596 - EXPECT_EQ(buf.size, 8); 3.597 - EXPECT_EQ(buf.pos, 8); 3.598 - EXPECT_EQ(buf.capacity, 8); 3.599 + CX_TEST_ASSERT(written == 4); 3.600 + CX_TEST_ASSERT(buf.size == 8); 3.601 + CX_TEST_ASSERT(buf.pos == 8); 3.602 + CX_TEST_ASSERT(buf.capacity == 8); 3.603 EXPECT_EQ(memcmp(buf.space, "preptest", 8), 0); 3.604 } 3.605 3.606 TEST_F(BufferWrite, PutStringWrapperDiscard) { 3.607 const char *data = "testing"; 3.608 - ASSERT_EQ(buf.capacity, 8); 3.609 - ASSERT_EQ(buf.pos, 4); 3.610 - ASSERT_EQ(buf.size, 4); 3.611 + CX_TEST_ASSERT(buf.capacity == 8); 3.612 + CX_TEST_ASSERT(buf.pos == 4); 3.613 + CX_TEST_ASSERT(buf.size == 4); 3.614 size_t written = cxBufferPutString(&buf, data); 3.615 - EXPECT_EQ(written, 4); 3.616 - EXPECT_EQ(buf.size, 8); 3.617 - EXPECT_EQ(buf.pos, 8); 3.618 - EXPECT_EQ(buf.capacity, 8); 3.619 + CX_TEST_ASSERT(written == 4); 3.620 + CX_TEST_ASSERT(buf.size == 8); 3.621 + CX_TEST_ASSERT(buf.pos == 8); 3.622 + CX_TEST_ASSERT(buf.capacity == 8); 3.623 EXPECT_EQ(memcmp(buf.space, "preptest\0", 9), 0); 3.624 } 3.625 3.626 TEST_F(BufferWrite, PutStringWrapperExtend) { 3.627 buf.flags |= CX_BUFFER_AUTO_EXTEND; 3.628 const char *data = "testing"; 3.629 - ASSERT_EQ(buf.capacity, 8); 3.630 - ASSERT_EQ(buf.pos, 4); 3.631 - ASSERT_EQ(buf.size, 4); 3.632 + CX_TEST_ASSERT(buf.capacity == 8); 3.633 + CX_TEST_ASSERT(buf.pos == 4); 3.634 + CX_TEST_ASSERT(buf.size == 4); 3.635 size_t written = cxBufferPutString(&buf, data); 3.636 - EXPECT_EQ(written, 7); 3.637 - EXPECT_EQ(buf.size, 11); 3.638 - EXPECT_EQ(buf.pos, 11); 3.639 + CX_TEST_ASSERT(written == 7); 3.640 + CX_TEST_ASSERT(buf.size == 11); 3.641 + CX_TEST_ASSERT(buf.pos == 11); 3.642 EXPECT_GE(buf.capacity, 11); 3.643 EXPECT_EQ(memcmp(buf.space, "preptesting", 11), 0); 3.644 } 3.645 3.646 TEST_F(BufferWrite, MultOverflow) { 3.647 const char *data = "testing"; 3.648 - ASSERT_EQ(buf.capacity, 8); 3.649 - ASSERT_EQ(buf.pos, 4); 3.650 - ASSERT_EQ(buf.size, 4); 3.651 + CX_TEST_ASSERT(buf.capacity == 8); 3.652 + CX_TEST_ASSERT(buf.pos == 4); 3.653 + CX_TEST_ASSERT(buf.size == 4); 3.654 size_t written = cxBufferWrite(data, 8, SIZE_MAX / 4, &buf); 3.655 - EXPECT_EQ(written, 0); 3.656 - EXPECT_EQ(buf.capacity, 8); 3.657 - EXPECT_EQ(buf.pos, 4); 3.658 - EXPECT_EQ(buf.size, 4); 3.659 + CX_TEST_ASSERT(written == 0); 3.660 + CX_TEST_ASSERT(buf.capacity == 8); 3.661 + CX_TEST_ASSERT(buf.pos == 4); 3.662 + CX_TEST_ASSERT(buf.size == 4); 3.663 EXPECT_EQ(memcmp(buf.space, "prep\0", 5), 0); 3.664 } 3.665 3.666 TEST_F(BufferWrite, MaxCapaOverflow) { 3.667 buf.flags |= CX_BUFFER_AUTO_EXTEND; 3.668 const char *data = "testing"; 3.669 - ASSERT_EQ(buf.capacity, 8); 3.670 - ASSERT_EQ(buf.pos, 4); 3.671 - ASSERT_EQ(buf.size, 4); 3.672 + CX_TEST_ASSERT(buf.capacity == 8); 3.673 + CX_TEST_ASSERT(buf.pos == 4); 3.674 + CX_TEST_ASSERT(buf.size == 4); 3.675 size_t written = cxBufferWrite(data, 1, SIZE_MAX - 2, &buf); 3.676 - EXPECT_EQ(written, 0); 3.677 - EXPECT_EQ(buf.capacity, 8); 3.678 - EXPECT_EQ(buf.pos, 4); 3.679 - EXPECT_EQ(buf.size, 4); 3.680 + CX_TEST_ASSERT(written == 0); 3.681 + CX_TEST_ASSERT(buf.capacity == 8); 3.682 + CX_TEST_ASSERT(buf.pos == 4); 3.683 + CX_TEST_ASSERT(buf.size == 4); 3.684 EXPECT_EQ(memcmp(buf.space, "prep\0", 5), 0); 3.685 } 3.686 3.687 TEST_F(BufferWrite, OnlyOverwrite) { 3.688 buf.flags |= CX_BUFFER_AUTO_EXTEND; 3.689 - ASSERT_EQ(buf.capacity, 8); 3.690 + CX_TEST_ASSERT(buf.capacity == 8); 3.691 memcpy(buf.space, "preptest", 8); 3.692 buf.pos = 3; 3.693 buf.size = 8; 3.694 size_t written = cxBufferWrite("XXX", 2, 2, &buf); 3.695 - EXPECT_EQ(written, 2); 3.696 - EXPECT_EQ(buf.capacity, 8); 3.697 - EXPECT_EQ(buf.size, 8); 3.698 - EXPECT_EQ(buf.pos, 7); 3.699 + CX_TEST_ASSERT(written == 2); 3.700 + CX_TEST_ASSERT(buf.capacity == 8); 3.701 + CX_TEST_ASSERT(buf.size == 8); 3.702 + CX_TEST_ASSERT(buf.pos == 7); 3.703 EXPECT_EQ(memcmp(buf.space, "preXXX\0t", 8), 0); 3.704 } 3.705 3.706 TEST_F(BufferWrite, FlushAtCapacity) { 3.707 enableFlushing(); 3.708 - ASSERT_EQ(buf.capacity, 8); 3.709 - ASSERT_EQ(buf.pos, 4); 3.710 + CX_TEST_ASSERT(buf.capacity == 8); 3.711 + CX_TEST_ASSERT(buf.pos == 4); 3.712 size_t written = cxBufferWrite("foo", 1, 3, &buf); 3.713 - EXPECT_EQ(written, 3); 3.714 - ASSERT_EQ(buf.pos, 7); 3.715 - ASSERT_EQ(buf.size, 7); 3.716 - ASSERT_EQ(target.pos, 0); 3.717 - ASSERT_EQ(target.size, 0); 3.718 + CX_TEST_ASSERT(written == 3); 3.719 + CX_TEST_ASSERT(buf.pos == 7); 3.720 + CX_TEST_ASSERT(buf.size == 7); 3.721 + CX_TEST_ASSERT(target.pos == 0); 3.722 + CX_TEST_ASSERT(target.size == 0); 3.723 written = cxBufferWrite("hello", 1, 5, &buf); 3.724 - EXPECT_EQ(written, 5); 3.725 - EXPECT_EQ(buf.pos, 0); 3.726 - EXPECT_EQ(buf.size, 0); 3.727 - EXPECT_EQ(buf.capacity, 8); 3.728 - EXPECT_EQ(target.pos, 12); 3.729 - ASSERT_EQ(target.size, 12); 3.730 + CX_TEST_ASSERT(written == 5); 3.731 + CX_TEST_ASSERT(buf.pos == 0); 3.732 + CX_TEST_ASSERT(buf.size == 0); 3.733 + CX_TEST_ASSERT(buf.capacity == 8); 3.734 + CX_TEST_ASSERT(target.pos == 12); 3.735 + CX_TEST_ASSERT(target.size == 12); 3.736 EXPECT_EQ(memcmp(target.space, "prepfoohello", 12), 0); 3.737 } 3.738 3.739 @@ -624,23 +460,23 @@ 3.740 enableFlushing(); 3.741 buf.flush_threshold = 12; 3.742 buf.flags |= CX_BUFFER_AUTO_EXTEND; 3.743 - ASSERT_EQ(buf.capacity, 8); 3.744 - ASSERT_EQ(buf.pos, 4); 3.745 + CX_TEST_ASSERT(buf.capacity == 8); 3.746 + CX_TEST_ASSERT(buf.pos == 4); 3.747 size_t written = cxBufferWrite("foobar", 1, 6, &buf); 3.748 - EXPECT_EQ(written, 6); 3.749 - ASSERT_EQ(buf.pos, 10); 3.750 - ASSERT_EQ(buf.size, 10); 3.751 + CX_TEST_ASSERT(written == 6); 3.752 + CX_TEST_ASSERT(buf.pos == 10); 3.753 + CX_TEST_ASSERT(buf.size == 10); 3.754 ASSERT_GE(buf.capacity, 10); 3.755 ASSERT_LE(buf.capacity, 12); 3.756 - ASSERT_EQ(target.pos, 0); 3.757 - ASSERT_EQ(target.size, 0); 3.758 + CX_TEST_ASSERT(target.pos == 0); 3.759 + CX_TEST_ASSERT(target.size == 0); 3.760 written = cxBufferWrite("hello", 1, 5, &buf); 3.761 - EXPECT_EQ(written, 5); 3.762 - EXPECT_EQ(buf.pos, 0); 3.763 - EXPECT_EQ(buf.size, 0); 3.764 + CX_TEST_ASSERT(written == 5); 3.765 + CX_TEST_ASSERT(buf.pos == 0); 3.766 + CX_TEST_ASSERT(buf.size == 0); 3.767 EXPECT_LE(buf.capacity, 12); 3.768 - EXPECT_EQ(target.pos, 15); 3.769 - ASSERT_EQ(target.size, 15); 3.770 + CX_TEST_ASSERT(target.pos == 15); 3.771 + CX_TEST_ASSERT(target.size == 15); 3.772 EXPECT_EQ(memcmp(target.space, "prepfoobarhello", 15), 0); 3.773 } 3.774 3.775 @@ -650,133 +486,43 @@ 3.776 target.capacity = 16; 3.777 target.flags &= ~CX_BUFFER_AUTO_EXTEND; 3.778 buf.flush_func = (cx_write_func) mock_write_limited_rate; 3.779 - ASSERT_EQ(buf.capacity, 8); 3.780 - ASSERT_EQ(buf.pos, 4); 3.781 + CX_TEST_ASSERT(buf.capacity == 8); 3.782 + CX_TEST_ASSERT(buf.pos == 4); 3.783 size_t written = cxBufferWrite("foo", 1, 3, &buf); 3.784 - EXPECT_EQ(written, 3); 3.785 - ASSERT_EQ(buf.pos, 7); 3.786 - ASSERT_EQ(buf.size, 7); 3.787 - ASSERT_EQ(target.pos, 0); 3.788 - ASSERT_EQ(target.size, 0); 3.789 + CX_TEST_ASSERT(written == 3); 3.790 + CX_TEST_ASSERT(buf.pos == 7); 3.791 + CX_TEST_ASSERT(buf.size == 7); 3.792 + CX_TEST_ASSERT(target.pos == 0); 3.793 + CX_TEST_ASSERT(target.size == 0); 3.794 written = cxBufferWrite("hello, world!", 1, 13, &buf); 3.795 // " world!" fits into this buffer, the remaining stuff is flushed out 3.796 - EXPECT_EQ(written, 13); 3.797 - EXPECT_EQ(buf.pos, 7); 3.798 - EXPECT_EQ(buf.size, 7); 3.799 - EXPECT_EQ(buf.capacity, 8); 3.800 + CX_TEST_ASSERT(written == 13); 3.801 + CX_TEST_ASSERT(buf.pos == 7); 3.802 + CX_TEST_ASSERT(buf.size == 7); 3.803 + CX_TEST_ASSERT(buf.capacity == 8); 3.804 EXPECT_EQ(memcmp(buf.space, " world!", 7), 0); 3.805 - EXPECT_EQ(target.pos, 13); 3.806 - ASSERT_EQ(target.size, 13); 3.807 - EXPECT_EQ(target.capacity, 16); 3.808 + CX_TEST_ASSERT(target.pos == 13); 3.809 + CX_TEST_ASSERT(target.size == 13); 3.810 + CX_TEST_ASSERT(target.capacity == 16); 3.811 EXPECT_EQ(memcmp(target.space, "prepfoohello,", 13), 0); 3.812 } 3.813 3.814 -class BufferSeek : public BufferFixture { 3.815 -}; 3.816 - 3.817 -TEST_F(BufferSeek, SetZero) { 3.818 - int result = cxBufferSeek(&buf, 0, SEEK_SET); 3.819 - EXPECT_EQ(result, 0); 3.820 - EXPECT_EQ(buf.pos, 0); 3.821 -} 3.822 - 3.823 -TEST_F(BufferSeek, SetValid) { 3.824 - int result = cxBufferSeek(&buf, 5, SEEK_SET); 3.825 - EXPECT_EQ(result, 0); 3.826 - EXPECT_EQ(buf.pos, 5); 3.827 -} 3.828 - 3.829 -TEST_F(BufferSeek, SetInvalid) { 3.830 - ASSERT_EQ(buf.pos, 3); 3.831 - int result = cxBufferSeek(&buf, 6, SEEK_SET); 3.832 - EXPECT_NE(result, 0); 3.833 - EXPECT_EQ(buf.pos, 3); 3.834 -} 3.835 - 3.836 -TEST_F(BufferSeek, CurZero) { 3.837 - ASSERT_EQ(buf.pos, 3); 3.838 - int result = cxBufferSeek(&buf, 0, SEEK_CUR); 3.839 - EXPECT_EQ(result, 0); 3.840 - EXPECT_EQ(buf.pos, 3); 3.841 -} 3.842 - 3.843 -TEST_F(BufferSeek, CurValidPositive) { 3.844 - ASSERT_EQ(buf.pos, 3); 3.845 - int result = cxBufferSeek(&buf, 2, SEEK_CUR); 3.846 - EXPECT_EQ(result, 0); 3.847 - EXPECT_EQ(buf.pos, 5); 3.848 -} 3.849 - 3.850 -TEST_F(BufferSeek, CurValidNegative) { 3.851 - ASSERT_EQ(buf.pos, 3); 3.852 - int result = cxBufferSeek(&buf, -3, SEEK_CUR); 3.853 - EXPECT_EQ(result, 0); 3.854 - EXPECT_EQ(buf.pos, 0); 3.855 -} 3.856 - 3.857 -TEST_F(BufferSeek, CurInvalidPositive) { 3.858 - ASSERT_EQ(buf.pos, 3); 3.859 - int result = cxBufferSeek(&buf, 3, SEEK_CUR); 3.860 - EXPECT_NE(result, 0); 3.861 - EXPECT_EQ(buf.pos, 3); 3.862 -} 3.863 - 3.864 -TEST_F(BufferSeek, CurInvalidNegative) { 3.865 - ASSERT_EQ(buf.pos, 3); 3.866 - int result = cxBufferSeek(&buf, -4, SEEK_CUR); 3.867 - EXPECT_NE(result, 0); 3.868 - EXPECT_EQ(buf.pos, 3); 3.869 -} 3.870 - 3.871 -TEST_F(BufferSeek, EndZero) { 3.872 - ASSERT_EQ(buf.size, 6); 3.873 - int result = cxBufferSeek(&buf, 0, SEEK_END); 3.874 - // the (past-the-)end position is always invalid 3.875 - EXPECT_NE(result, 0); 3.876 - EXPECT_EQ(buf.pos, 3); 3.877 -} 3.878 - 3.879 -TEST_F(BufferSeek, EndValid) { 3.880 - ASSERT_EQ(buf.size, 6); 3.881 - int result = cxBufferSeek(&buf, -6, SEEK_END); 3.882 - EXPECT_EQ(result, 0); 3.883 - EXPECT_EQ(buf.pos, 0); 3.884 -} 3.885 - 3.886 -TEST_F(BufferSeek, EndInvalid) { 3.887 - ASSERT_EQ(buf.size, 6); 3.888 - int result = cxBufferSeek(&buf, 1, SEEK_END); 3.889 - EXPECT_NE(result, 0); 3.890 - EXPECT_EQ(buf.pos, 3); 3.891 -} 3.892 - 3.893 -TEST_F(BufferSeek, WhenceInvalid) { 3.894 - ASSERT_EQ(buf.size, 6); 3.895 - ASSERT_EQ(buf.pos, 3); 3.896 - int result = cxBufferSeek(&buf, 2, 9000); 3.897 - EXPECT_NE(result, 0); 3.898 - EXPECT_EQ(buf.size, 6); 3.899 - EXPECT_EQ(buf.pos, 3); 3.900 -} 3.901 - 3.902 -class BufferEof : public BufferFixture { 3.903 -}; 3.904 3.905 TEST_F(BufferEof, Reached) { 3.906 buf.pos = buf.size; 3.907 - EXPECT_TRUE(cxBufferEof(&buf)); 3.908 + CX_TEST_ASSERT(cxBufferEof(&buf)); 3.909 buf.pos = buf.size - 1; 3.910 - ASSERT_FALSE(cxBufferEof(&buf)); 3.911 + CX_TEST_ASSERT(!cxBufferEof(&buf)); 3.912 cxBufferPut(&buf, 'a'); 3.913 - EXPECT_TRUE(cxBufferEof(&buf)); 3.914 + CX_TEST_ASSERT(cxBufferEof(&buf)); 3.915 } 3.916 3.917 TEST_F(BufferEof, NotReached) { 3.918 buf.pos = buf.size - 1; 3.919 - EXPECT_FALSE(cxBufferEof(&buf)); 3.920 + CX_TEST_ASSERT(!cxBufferEof(&buf)); 3.921 buf.pos = 0; 3.922 cxBufferWrite("test", 1, 5, &buf); 3.923 - EXPECT_FALSE(cxBufferEof(&buf)); 3.924 + CX_TEST_ASSERT(!cxBufferEof(&buf)); 3.925 } 3.926 3.927 class BufferRead : public ::testing::Test { 3.928 @@ -784,7 +530,7 @@ 3.929 CxBuffer buf{}; 3.930 3.931 void SetUp() override { 3.932 - cxBufferInit(&buf, nullptr, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 3.933 + cxBufferInit(&buf, NULL, 16, cxDefaultAllocator, CX_BUFFER_DEFAULT); 3.934 buf.capacity = 8; // artificially reduce capacity to check OOB writes 3.935 memset(buf.space, 0, 16); 3.936 memcpy(buf.space, "some data", 9); 3.937 @@ -802,7 +548,7 @@ 3.938 EXPECT_EQ(cxBufferGet(&buf), 'e'); 3.939 EXPECT_EQ(cxBufferGet(&buf), ' '); 3.940 EXPECT_EQ(cxBufferGet(&buf), 'd'); 3.941 - EXPECT_EQ(buf.pos, 6); 3.942 + CX_TEST_ASSERT(buf.pos == 6); 3.943 } 3.944 3.945 TEST_F(BufferRead, GetEof) { 3.946 @@ -814,18 +560,18 @@ 3.947 buf.pos = 2; 3.948 char target[4]; 3.949 auto read = cxBufferRead(&target, 1, 4, &buf); 3.950 - ASSERT_EQ(read, 4); 3.951 + CX_TEST_ASSERT(read == 4); 3.952 EXPECT_EQ(memcmp(&target, "me d", 4), 0); 3.953 - EXPECT_EQ(buf.pos, 6); 3.954 + CX_TEST_ASSERT(buf.pos == 6); 3.955 } 3.956 3.957 TEST_F(BufferRead, ReadOutOfBounds) { 3.958 buf.pos = 6; 3.959 char target[4]; 3.960 auto read = cxBufferRead(&target, 1, 4, &buf); 3.961 - ASSERT_EQ(read, 3); 3.962 + CX_TEST_ASSERT(read == 3); 3.963 EXPECT_EQ(memcmp(&target, "ata", 3), 0); 3.964 - EXPECT_EQ(buf.pos, 9); 3.965 + CX_TEST_ASSERT(buf.pos == 9); 3.966 } 3.967 3.968 TEST_F(BufferRead, ReadOutOfBoundsMultibyte) { 3.969 @@ -833,15 +579,15 @@ 3.970 char target[4]; 3.971 target[2] = '\0'; 3.972 auto read = cxBufferRead(&target, 2, 2, &buf); 3.973 - ASSERT_EQ(read, 1); 3.974 + CX_TEST_ASSERT(read == 1); 3.975 EXPECT_EQ(memcmp(&target, "at\0", 3), 0); 3.976 - EXPECT_EQ(buf.pos, 8); 3.977 + CX_TEST_ASSERT(buf.pos == 8); 3.978 } 3.979 3.980 TEST_F(BufferRead, ReadEof) { 3.981 buf.pos = 9; 3.982 char target[4]; 3.983 auto read = cxBufferRead(&target, 1, 1, &buf); 3.984 - ASSERT_EQ(read, 0); 3.985 - EXPECT_EQ(buf.pos, 9); 3.986 + CX_TEST_ASSERT(read == 0); 3.987 + CX_TEST_ASSERT(buf.pos == 9); 3.988 }
4.1 --- a/tests/ucxtest.c Mon Jan 01 15:33:20 2024 +0100 4.2 +++ b/tests/ucxtest.c Mon Jan 01 16:42:37 2024 +0100 4.3 @@ -34,6 +34,7 @@ 4.4 CxTestSuite *cx_test_suite_hash_key(void); 4.5 CxTestSuite *cx_test_suite_allocator(void); 4.6 CxTestSuite *cx_test_suite_string(void); 4.7 +CxTestSuite *cx_test_suite_buffer(void); 4.8 CxTestSuite *cx_test_suite_printf(void); 4.9 CxTestSuite *cx_test_suite_mempool(void); 4.10 CxTestSuite *cx_test_suite_hash_map(void); 4.11 @@ -53,6 +54,7 @@ 4.12 cx_test_suite_hash_key(), 4.13 cx_test_suite_allocator(), 4.14 cx_test_suite_string(), 4.15 + cx_test_suite_buffer(), 4.16 cx_test_suite_printf(), 4.17 cx_test_suite_mempool(), 4.18 cx_test_suite_hash_map()