From 6e7b20a41c8a7f10392884e1741b031b579a93fa Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Sat, 23 Sep 2023 10:37:27 +0200 Subject: Cleanup: move memory/stdio streams to libcommon Signed-off-by: David Oberhollenzer --- lib/common/test/istream_mem.c | 74 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 lib/common/test/istream_mem.c (limited to 'lib/common/test') diff --git a/lib/common/test/istream_mem.c b/lib/common/test/istream_mem.c new file mode 100644 index 0000000..2213168 --- /dev/null +++ b/lib/common/test/istream_mem.c @@ -0,0 +1,74 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * istream_mem.c + * + * Copyright (C) 2023 David Oberhollenzer + */ +#include "config.h" + +#include "util/test.h" +#include "sqfs/io.h" +#include "common.h" + +static const size_t end0 = 449; /* region 1: filled with 'A' */ +static const size_t end1 = 521; /* region 2: filled with 'B' */ +static const size_t end2 = 941; /* region 3: filled with 'C' */ + +static unsigned char data[941]; + +static unsigned char byte_at_offset(size_t off) +{ + if (off < end0) + return 'A'; + if (off < end1) + return 'B'; + return 'C'; +} + +static void init_buffer(void) +{ + for (size_t i = 0; i < end2; ++i) + data[i] = byte_at_offset(i); +} + +int main(int argc, char **argv) +{ + size_t i, diff, size; + bool eat_all = true; + const sqfs_u8 *ptr; + sqfs_istream_t *in; + int ret; + (void)argc; (void)argv; + + init_buffer(); + + in = istream_memory_create("memstream.txt", 61, data, sizeof(data)); + TEST_NOT_NULL(in); + TEST_EQUAL_UI(((sqfs_object_t *)in)->refcount, 1); + + TEST_STR_EQUAL(in->get_filename(in), "memstream.txt"); + + for (i = 0; i < end2; i += diff) { + ret = in->get_buffered_data(in, &ptr, &size, 61); + TEST_EQUAL_I(ret, 0); + + if ((end2 - i) >= 61) { + TEST_NOT_NULL(ptr); + TEST_EQUAL_UI(size, 61); + } else { + TEST_NOT_NULL(ptr); + TEST_EQUAL_UI(size, (end2 - i)); + } + + for (size_t j = 0; j < size; ++j) { + TEST_EQUAL_UI(ptr[j], byte_at_offset(i + j)); + } + + diff = eat_all ? size : (size / 2); + eat_all = !eat_all; + in->advance_buffer(in, diff); + } + + sqfs_drop(in); + return EXIT_SUCCESS; +} -- cgit v1.2.3