diff options
Diffstat (limited to 'test/memorytests.c')
-rw-r--r-- | test/memorytests.c | 246 |
1 files changed, 0 insertions, 246 deletions
diff --git a/test/memorytests.c b/test/memorytests.c deleted file mode 100644 index 7c55cce..0000000 --- a/test/memorytests.c +++ /dev/null @@ -1,246 +0,0 @@ -/* test/basictests.c - * - * Basic tests for the test suite for libwapcaplet - * - * Copyright 2009 The NetSurf Browser Project - * Daniel Silverstone <dsilvers@netsurf-browser.org> - */ - -#include <check.h> -#include <stdlib.h> - -#include "tests.h" - -/**** Simple tracking allocator ****/ - -typedef enum { - NONE, ALLOC, FREE -} alloc_op; - -static unsigned long bytes = 0; -static unsigned long allocs = 0; -static void *last_pw = NULL; -static alloc_op last_op = NONE; - -static void * -tracking_allocator(void *ptr, size_t len, void *pw) -{ - void *ret; - last_pw = pw; - if (ptr == NULL) { - last_op = ALLOC; - bytes += len; - allocs++; - ret = malloc(len + sizeof(size_t)); - *(size_t *)ret = len; - return ((char *) ret) + sizeof(size_t); - } - last_op = FREE; - allocs--; - bytes -= *(((size_t *)ptr) - 1); - free((((size_t *)ptr) - 1)); - return NULL; -} - -static lwc_context *ctx = NULL; - -static void -with_tracked_alloc_setup(void) -{ - fail_unless(lwc_create_context(tracking_allocator, NULL, &ctx) == lwc_error_ok, - "Unable to create context"); - fail_unless(allocs == 1, - "Creating a context used more than one alloc?"); - fail_unless(lwc_context_ref(ctx) == ctx, - "Reffing the context failed to return the context."); -} - -static void -with_tracked_alloc_teardown(void) -{ - lwc_context_unref(ctx); - fail_unless(allocs == 0, - "Unreffing the context failed to free everything left."); -} - -START_TEST (test_tracking_one_intern) -{ - lwc_string *str; - fail_unless(lwc_context_intern(ctx, "one", 3, &str) == lwc_error_ok, - "Unable to intern 'one'"); - fail_unless(allocs == 2, - "Interning a string into a fresh context didn't."); -} -END_TEST - -START_TEST (test_tracking_one_intern_twice) -{ - lwc_string *str; - fail_unless(lwc_context_intern(ctx, "one", 3, &str) == lwc_error_ok, - "Unable to intern 'one'"); - fail_unless(allocs == 2, - "Interning a string into a fresh context didn't."); - fail_unless(lwc_context_intern(ctx, "one", 3, &str) == lwc_error_ok, - "Unable to intern 'one' again"); - fail_unless(allocs == 2, - "Interning a string again still did."); -} -END_TEST - -START_TEST (test_tracking_two_interns) -{ - lwc_string *one, *ONE; - fail_unless(lwc_context_intern(ctx, "one", 3, &one) == lwc_error_ok, - "Unable to intern 'one'"); - fail_unless(allocs == 2, - "Interning a string into a fresh context didn't."); - fail_unless(lwc_context_intern(ctx, "ONE", 3, &ONE) == lwc_error_ok, - "Unable to intern 'one' again"); - fail_unless(allocs == 3, - "Interning a new string didn't."); -} -END_TEST - -START_TEST (test_tracking_two_interns_caseless1) -{ - lwc_string *one, *ONE; - bool comp = false; - fail_unless(lwc_context_intern(ctx, "one", 3, &one) == lwc_error_ok, - "Unable to intern 'one'"); - fail_unless(allocs == 2, - "Interning a string into a fresh context didn't."); - fail_unless(lwc_context_intern(ctx, "ONE", 3, &ONE) == lwc_error_ok, - "Unable to intern 'ONE'"); - fail_unless(allocs == 3, - "Interning a new string didn't."); - fail_unless(lwc_context_string_caseless_isequal(ctx, one, ONE, &comp) == lwc_error_ok, - "Unable to caseless compare"); - fail_unless(allocs == 3, - "Caseless compare created worthless new values"); - fail_unless(comp == true, - "Caseless compare failed to spot that 'one' and 'ONE' are the same"); -} -END_TEST - -START_TEST (test_tracking_two_interns_caseless2) -{ - lwc_string *one, *ONE; - bool comp = false; - fail_unless(lwc_context_intern(ctx, "oNe", 3, &one) == lwc_error_ok, - "Unable to intern 'oNe'"); - fail_unless(allocs == 2, - "Interning a string into a fresh context didn't."); - fail_unless(lwc_context_intern(ctx, "ONE", 3, &ONE) == lwc_error_ok, - "Unable to intern 'ONE'"); - fail_unless(allocs == 3, - "Interning a new string didn't."); - fail_unless(lwc_context_string_caseless_isequal(ctx, one, ONE, &comp) == lwc_error_ok, - "Unable to caseless compare"); - fail_unless(allocs == 4, - "Caseless compare didn't make one caseless 'one'"); - fail_unless(comp == true, - "Caseless compare failed to spot that 'oNe' and 'ONE' are the same"); -} -END_TEST - -START_TEST (test_tracking_caseless_unref1) -{ - lwc_string *one, *ONE; - bool comp = false; - fail_unless(lwc_context_intern(ctx, "one", 3, &one) == lwc_error_ok, - "Unable to intern 'one'"); - fail_unless(allocs == 2, - "Interning a string into a fresh context didn't."); - fail_unless(lwc_context_intern(ctx, "ONE", 3, &ONE) == lwc_error_ok, - "Unable to intern 'ONE'"); - fail_unless(allocs == 3, - "Interning a new string didn't."); - fail_unless(lwc_context_string_caseless_isequal(ctx, one, ONE, &comp) == lwc_error_ok, - "Unable to caseless compare"); - fail_unless(allocs == 3, - "Caseless compare made pointless additional 'one'"); - fail_unless(comp == true, - "Caseless compare failed to spot that 'oNe' and 'ONE' are the same"); - - lwc_context_string_unref(ctx, ONE); - fail_unless(allocs == 2, "Unreffing 'ONE' failed to free something"); -} -END_TEST - -START_TEST (test_tracking_caseless_unref2) -{ - lwc_string *one, *ONE; - bool comp = false; - fail_unless(lwc_context_intern(ctx, "one", 3, &one) == lwc_error_ok, - "Unable to intern 'one'"); - fail_unless(allocs == 2, - "Interning a string into a fresh context didn't."); - fail_unless(lwc_context_intern(ctx, "ONE", 3, &ONE) == lwc_error_ok, - "Unable to intern 'ONE'"); - fail_unless(allocs == 3, - "Interning a new string didn't."); - fail_unless(lwc_context_string_caseless_isequal(ctx, one, ONE, &comp) == lwc_error_ok, - "Unable to caseless compare"); - fail_unless(allocs == 3, - "Caseless compare made pointless additional 'one'"); - fail_unless(comp == true, - "Caseless compare failed to spot that 'oNe' and 'ONE' are the same"); - - lwc_context_string_unref(ctx, ONE); - fail_unless(allocs == 2, "Unreffing 'ONE' failed to free something"); - - lwc_context_string_unref(ctx, one); - fail_unless(allocs == 1, "Unreffing 'one' failed to free something"); -} -END_TEST - -START_TEST (test_tracking_caseless_unref3) -{ - lwc_string *one, *ONE; - bool comp = false; - fail_unless(lwc_context_intern(ctx, "one", 3, &one) == lwc_error_ok, - "Unable to intern 'one'"); - fail_unless(allocs == 2, - "Interning a string into a fresh context didn't."); - fail_unless(lwc_context_intern(ctx, "ONE", 3, &ONE) == lwc_error_ok, - "Unable to intern 'ONE'"); - fail_unless(allocs == 3, - "Interning a new string didn't."); - fail_unless(lwc_context_string_caseless_isequal(ctx, one, ONE, &comp) == lwc_error_ok, - "Unable to caseless compare"); - fail_unless(allocs == 3, - "Caseless compare made pointless additional 'one'"); - fail_unless(comp == true, - "Caseless compare failed to spot that 'oNe' and 'ONE' are the same"); - - lwc_context_string_unref(ctx, one); - fail_unless(allocs == 3, "Unreffing 'one' freed something"); - - lwc_context_string_unref(ctx, ONE); - fail_unless(allocs == 1, "Unreffing 'ONE' failed to free both things"); -} -END_TEST - -/**** And the suites are set up here ****/ - -void -lwc_memory_suite(SRunner *sr) -{ - Suite *s = suite_create("libwapcaplet: Memory allocation tests"); - TCase *tc_mem = tcase_create("memory"); - - tcase_add_checked_fixture(tc_mem, with_tracked_alloc_setup, - with_tracked_alloc_teardown); - - tcase_add_test(tc_mem, test_tracking_one_intern); - tcase_add_test(tc_mem, test_tracking_one_intern_twice); - tcase_add_test(tc_mem, test_tracking_two_interns); - tcase_add_test(tc_mem, test_tracking_two_interns_caseless1); - tcase_add_test(tc_mem, test_tracking_two_interns_caseless2); - tcase_add_test(tc_mem, test_tracking_caseless_unref1); - tcase_add_test(tc_mem, test_tracking_caseless_unref2); - tcase_add_test(tc_mem, test_tracking_caseless_unref3); - - suite_add_tcase(s, tc_mem); - srunner_add_suite(sr, s); -} |