From 7988979a722b4cdf287b2093956a76a3f19b9897 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Mon, 24 Oct 2016 20:22:12 +0200 Subject: add uClibc-ng test directory --- test/malloc/tst-obstack.c | 104 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 test/malloc/tst-obstack.c (limited to 'test/malloc/tst-obstack.c') diff --git a/test/malloc/tst-obstack.c b/test/malloc/tst-obstack.c new file mode 100644 index 0000000..1841946 --- /dev/null +++ b/test/malloc/tst-obstack.c @@ -0,0 +1,104 @@ +/* Test case by Alexandre Duret-Lutz . + * test_obstack_printf() added by Anthony G. Basile . + */ + +#include +#include +#include +#include +#include + +#define obstack_chunk_alloc verbose_malloc +#define obstack_chunk_free verbose_free +#define ALIGN_BOUNDARY 64 +#define ALIGN_MASK (ALIGN_BOUNDARY - 1) +#define OBJECT_SIZE 1000 + +static void * +verbose_malloc (size_t size) +{ + void *buf = malloc (size); + printf ("malloc (%zu) => %p\n", size, buf); + return buf; +} + +static void +verbose_free (void *buf) +{ + free (buf); + printf ("free (%p)\n", buf); +} + +int +test_obstack_alloc (void) +{ + int result = 0; + int align = 2; + + while (align <= 64) + { + struct obstack obs; + int i; + int align_mask = align - 1; + + printf ("\n Alignment mask: %d\n", align_mask); + + obstack_init (&obs); + obstack_alignment_mask (&obs) = align_mask; + /* finish an empty object to take alignment into account */ + obstack_finish (&obs); + + /* let's allocate some objects and print their addresses */ + for (i = 15; i > 0; --i) + { + void *obj = obstack_alloc (&obs, OBJECT_SIZE); + + printf ("obstack_alloc (%u) => %p \t%s\n", OBJECT_SIZE, obj, + ((uintptr_t) obj & align_mask) ? "(not aligned)" : ""); + result |= ((uintptr_t) obj & align_mask) != 0; + } + + /* clean up */ + obstack_free (&obs, 0); + + align <<= 1; + } + + return result; +} + +int +test_obstack_printf (void) +{ + int result = 0; + int n; + char *s; + struct obstack ob; + + obstack_init (&ob); + + n = obstack_printf (&ob, "%s%d%c", "testing 1 ... 2 ... ", 3, '\n'); + result |= (n != 22); + printf("obstack_printf => %d\n", n); + + n = obstack_printf (&ob, "%s%d%c", "testing 3 ... 2 ... ", 1, '\0'); + result |= (n != 22); + printf("obstack_printf => %d\n", n); + + s = obstack_finish (&ob); + printf("obstack_printf => %s\n", s); + obstack_free (&ob, NULL); + + return result; +} + +int +main (void) +{ + int result = 0; + + result |= test_obstack_alloc(); + result |= test_obstack_printf(); + + return result; +} -- cgit v1.2.3