X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Ftests%2Ftest_silcstack.c;h=34b6fc3fead140a024985a44912668bea998d2cd;hb=e7b6c157b80152bf9fb9266e6bdd93f9fb0db776;hp=3a50a1cda5ebbc3918237a9d00cb49ce4168bb29;hpb=c27a4ecc3e616e8a5ee09b8ca888ed6ff3e501f7;p=silc.git diff --git a/lib/silcutil/tests/test_silcstack.c b/lib/silcutil/tests/test_silcstack.c index 3a50a1cd..34b6fc3f 100644 --- a/lib/silcutil/tests/test_silcstack.c +++ b/lib/silcutil/tests/test_silcstack.c @@ -1,13 +1,13 @@ /* SilcStack tests */ -#include "silcincludes.h" +#include "silc.h" #define NUM_ALLS 300 int main(int argc, char **argv) { SilcBool success = FALSE; - SilcStack stack; + SilcStack stack, child, child2; void *ptr, *ptr2; int i; @@ -15,11 +15,11 @@ int main(int argc, char **argv) silc_log_debug(TRUE); silc_log_debug_hexdump(TRUE); silc_log_quick(TRUE); - silc_log_set_debug_string("*stack*"); + silc_log_set_debug_string("*stack*,*errno*"); } SILC_LOG_DEBUG(("Allocating stack of default size (1024 bytes)")); - stack = silc_stack_alloc(0); + stack = silc_stack_alloc(0, NULL); if (!stack) goto err; silc_stack_stats(stack); @@ -34,7 +34,7 @@ int main(int argc, char **argv) silc_stack_free(stack); SILC_LOG_DEBUG(("Allocating stack of default size (1024 bytes)")); - stack = silc_stack_alloc(0); + stack = silc_stack_alloc(0, NULL); if (!stack) goto err; silc_stack_stats(stack); @@ -93,6 +93,107 @@ int main(int argc, char **argv) SILC_LOG_DEBUG(("Popping")); silc_stack_stats(stack); + SILC_LOG_DEBUG(("Creating child stack")); + child = silc_stack_alloc(8190, stack); + if (!child) + goto err; + SILC_LOG_DEBUG(("Pushing %d times", NUM_ALLS / 2)); + for (i = 0; i < NUM_ALLS / 2; i++) { + if (!silc_stack_push(child, NULL)) + goto err; + ptr2 = silc_smalloc(child, (i + 1) * 7); + if (!ptr2) + goto err; + } + silc_stack_stats(child); + SILC_LOG_DEBUG(("Popping %d times", NUM_ALLS / 2)); + for (i = 0; i < NUM_ALLS / 2; i++) + silc_stack_pop(child); + silc_stack_stats(child); + + SILC_LOG_DEBUG(("Pushing and reallocating %d times", NUM_ALLS / 10)); + ptr2 = NULL; + if (!silc_stack_push(child, NULL)) + goto err; + for (i = 0; i < NUM_ALLS / 10; i++) { + ptr2 = silc_srealloc(child, (i * 7), ptr2, (i + 1) * 7); + if (!ptr2) + goto err; + } + ptr = silc_smalloc(child, 100000); + silc_stack_stats(child); + silc_stack_pop(child); + SILC_LOG_DEBUG(("Popping")); + silc_stack_stats(child); + silc_stack_stats(stack); + silc_stack_free(child); + silc_stack_stats(stack); + + SILC_LOG_DEBUG(("Creating child stack")); + child = silc_stack_alloc(8192, stack); + if (!child) + goto err; + SILC_LOG_DEBUG(("Pushing %d times", NUM_ALLS / 10)); + for (i = 0; i < NUM_ALLS / 10; i++) { + if (!silc_stack_push(child, NULL)) + goto err; + ptr2 = silc_smalloc(child, (i + 1) * 7); + if (!ptr2) + goto err; + } + silc_stack_stats(child); + SILC_LOG_DEBUG(("Popping %d times", NUM_ALLS / 10)); + for (i = 0; i < NUM_ALLS / 10; i++) + silc_stack_pop(child); + silc_stack_stats(child); + + SILC_LOG_DEBUG(("Pushing and reallocating %d times", NUM_ALLS / 10)); + ptr2 = NULL; + if (!silc_stack_push(child, NULL)) + goto err; + for (i = 0; i < NUM_ALLS / 10; i++) { + ptr2 = silc_srealloc(child, (i * 7), ptr2, (i + 1) * 7); + if (!ptr2) + goto err; + } + SILC_LOG_DEBUG(("Allocate child from child")); + child2 = silc_stack_alloc(0, child); + ptr = silc_smalloc(child2, 500000); + silc_stack_stats(child2); + silc_stack_free(child2); + silc_stack_stats(child); + silc_stack_pop(child); + SILC_LOG_DEBUG(("Popping")); + silc_stack_stats(child); + silc_stack_stats(stack); + silc_stack_free(child); + silc_stack_stats(stack); + + SILC_LOG_DEBUG(("Purge stack")); + silc_stack_purge(stack); + silc_stack_stats(stack); + + SILC_LOG_DEBUG(("Current alignment: %d", silc_stack_get_alignment(stack))); + SILC_LOG_DEBUG(("Set alignemtn to 16")); + silc_stack_set_alignment(stack, 16); + SILC_LOG_DEBUG(("Current alignment: %d", silc_stack_get_alignment(stack))); + SILC_LOG_DEBUG(("Allocate 1 byte")); + ptr = silc_smalloc(stack, 1); + SILC_LOG_DEBUG(("Allocate 1 byte, check alignment")); + ptr2 = silc_smalloc(stack, 1); + if (ptr2 - ptr < 16) { + SILC_LOG_DEBUG(("Bad alignment")); + goto err; + } + SILC_LOG_DEBUG(("Alignment (ptr, ptr2) is %d", ptr2 - ptr)); + SILC_LOG_DEBUG(("Allocate 1 byte, check alignment")); + ptr2 = silc_smalloc(stack, 1); + if (ptr2 - ptr < 32) { + SILC_LOG_DEBUG(("Bad alignment")); + goto err; + } + SILC_LOG_DEBUG(("Alignment (ptr, ptr2) is %d", ptr2 - ptr)); + SILC_LOG_DEBUG(("Freeing the stack")); silc_stack_free(stack);