Mon, 11 Nov 2024 21:42:14 +0100
simplify cx_array_copy() - fixes #474
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2023 Mike Becker, Olaf Wintermann All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include "cx/test.h" #include "cx/streams.h" #include "cx/buffer.h" CX_TEST(test_stream_bncopy) { CxBuffer source, target; char sbuf[32], tbuf[32]; memset(tbuf, 0, 32); cxBufferInit(&source, sbuf, 32, NULL, 0); cxBufferInit(&target, tbuf, 32, NULL, 0); cxBufferPutString(&source, "This is a stream copy test."); cxBufferSeek(&source, 0, SEEK_SET); char tmp[4]; CX_TEST_DO { size_t result = cx_stream_bncopy(&source, &target, (cx_read_func) cxBufferRead, (cx_write_func) cxBufferWrite, tmp, 4, 20); CX_TEST_ASSERT(result == 20); CX_TEST_ASSERT(target.size == 20); CX_TEST_ASSERT(strcmp("This is a stream cop\0", tbuf) == 0); result = cx_stream_bcopy(&source, &target, (cx_read_func) cxBufferRead, (cx_write_func) cxBufferWrite, NULL, 16); CX_TEST_ASSERT(result == 7); CX_TEST_ASSERT(target.size == 27); CX_TEST_ASSERT(strcmp("This is a stream copy test.\0", tbuf) == 0); } cxBufferDestroy(&source); cxBufferDestroy(&target); } CX_TEST(test_stream_ncopy) { CxBuffer source, target; char sbuf[32], tbuf[32]; memset(tbuf, 0, 32); cxBufferInit(&source, sbuf, 32, NULL, 0); cxBufferInit(&target, tbuf, 32, NULL, 0); cxBufferPutString(&source, "This is a stream copy test."); cxBufferSeek(&source, 0, SEEK_SET); CX_TEST_DO { size_t result = cx_stream_ncopy(&source, &target, (cx_read_func) cxBufferRead, (cx_write_func) cxBufferWrite, 20); CX_TEST_ASSERT(result == 20); CX_TEST_ASSERT(target.size == 20); CX_TEST_ASSERT(strcmp("This is a stream cop\0", tbuf) == 0); result = cx_stream_copy(&source, &target, (cx_read_func) cxBufferRead, (cx_write_func) cxBufferWrite); CX_TEST_ASSERT(result == 7); CX_TEST_ASSERT(target.size == 27); CX_TEST_ASSERT(strcmp("This is a stream copy test.\0", tbuf) == 0); } cxBufferDestroy(&source); cxBufferDestroy(&target); } CxTestSuite *cx_test_suite_streams(void) { CxTestSuite *suite = cx_test_suite_new("streams"); cx_test_register(suite, test_stream_bncopy); cx_test_register(suite, test_stream_ncopy); return suite; }