diff options
| author | Thomas Jarosch <tomj@simonv.com> | 2015-01-03 17:06:21 +0100 |
|---|---|---|
| committer | Thomas Jarosch <tomj@simonv.com> | 2015-01-03 18:17:11 +0100 |
| commit | 7d5f13300708c0f0ef15150fdebd6158260247d2 (patch) | |
| tree | abfe56d7ccd8735e60d0587ce28b13a62580698d /firmware/test/buflib/test_main2.c | |
| parent | e7d94323bcb481d4fb1e1e77fdd26b23916aca1d (diff) | |
| download | rockbox-7d5f13300708c0f0ef15150fdebd6158260247d2.zip rockbox-7d5f13300708c0f0ef15150fdebd6158260247d2.tar.gz rockbox-7d5f13300708c0f0ef15150fdebd6158260247d2.tar.bz2 rockbox-7d5f13300708c0f0ef15150fdebd6158260247d2.tar.xz | |
Bring abroad second buflib test
Interfaces with core_alloc_* instead of buflib directly.
Provide UT_core_allocator_init() with
a fixed buffer size for predictable results.
Change-Id: I26a7b3101f7782063547940bded52d8202638394
Diffstat (limited to 'firmware/test/buflib/test_main2.c')
| -rw-r--r-- | firmware/test/buflib/test_main2.c | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/firmware/test/buflib/test_main2.c b/firmware/test/buflib/test_main2.c new file mode 100644 index 0000000..9fed786 --- /dev/null +++ b/firmware/test/buflib/test_main2.c @@ -0,0 +1,108 @@ +/*************************************************************************** +* __________ __ ___. +* Open \______ \ ____ ____ | | _\_ |__ _______ ___ +* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / +* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < +* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ +* \/ \/ \/ \/ \/ +* $Id$ +* +* Copyright (C) 2011 Thomas Martitz +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +* KIND, either express or implied. +* +****************************************************************************/ +#include <stdio.h> +#include <stdlib.h> +#include "core_alloc.h" +#include "util.h" + +/* + * Expected output (64-bit): +------------------- +------------------- +*/ + +#define error(...) do { printf(__VA_ARGS__); exit(1); } while(0) +static int move_callback(int handle, void* old, void* new) +{ + printf("MOVED!\n"); + return BUFLIB_CB_OK; +} + +static int shrink_callback(int handle, unsigned hints, void* start, size_t size) +{ + char* buf = start; + + size_t wanted = hints & BUFLIB_SHRINK_SIZE_MASK; + + if (handle == 4) + { + buf+=1, size-=1; + memmove(buf, buf-1, (size < 20) ? size : 20); + core_shrink(handle, buf, size); + return BUFLIB_CB_OK; + } + return BUFLIB_CB_CANNOT_SHRINK; +} + +struct buflib_callbacks ops = { + .move_callback = move_callback, + .shrink_callback = shrink_callback, +}; + +struct buflib_callbacks ops2 = { + .move_callback = NULL, + .shrink_callback = shrink_callback, +}; + +int main(void) +{ + size_t size2, size4; + UT_core_allocator_init(); + + printf("available: %zu\n", core_available()); + int first = core_alloc("first, fixed", 4<<10); + if (first <= 0) error("first failed\n"); + + printf("available: %zu\n", core_available()); + int second = core_alloc_maximum("second, var", &size2, &ops); + if (second <= 0) error("second failed\n"); + printf("second size: %zu\n", size2); + + strcpy(core_get_data(second), "begin"); + strcpy(core_get_data(second)+124, "end"); + printf("%s\n", core_get_name(second)); + if (!core_shrink(second, core_get_data(second), 128)) + error("shrink second failed\n"); + + int third = core_alloc("third, fixed", 20<<10); + if (third <= 0) error("third failed"); + strcpy(core_get_data(third), "third"); + + printf("available: %zu\n", core_available()); + int fourth = core_alloc_maximum("fourth", &size4, &ops2); + if (fourth <= 0) error("fourth failed\n"); + core_print_blocks(&print_simple); + if (!core_shrink(fourth, core_get_data(fourth)+(5<<10), size4-(5<<10))) + { + error("shrink fourth failed\n"); + } + sprintf(core_get_data(fourth), "fourth size: %zu", size4); + core_print_blocks(&print_simple); + + int fifth = core_alloc("fifth, fixed", 6<<10); + if (fifth <= 0) error("fifth failed\n"); + + printf("%s\n", core_get_data(fourth)); + core_print_blocks(&print_simple); + core_print_allocs(&print_simple); + + return 0; +} |