From: Matthias Clasen Date: Mon, 30 Dec 2013 15:54:46 +0000 (-0500) Subject: Add tests for g_malloc X-Git-Tag: 2.39.3~53 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4f0a13effca82febccb0e84d0017bf378359fb69;p=platform%2Fupstream%2Fglib.git Add tests for g_malloc --- diff --git a/glib/tests/Makefile.am b/glib/tests/Makefile.am index eb0efd5..6cfcbdd 100644 --- a/glib/tests/Makefile.am +++ b/glib/tests/Makefile.am @@ -57,6 +57,7 @@ test_programs = \ list \ logging \ mainloop \ + malloc \ mappedfile \ markup \ markup-parse \ diff --git a/glib/tests/malloc.c b/glib/tests/malloc.c new file mode 100644 index 0000000..0a95d96 --- /dev/null +++ b/glib/tests/malloc.c @@ -0,0 +1,117 @@ +/* Unit tests for g_malloc + * Copyright (C) 2013 Red Hat, Inc. + * + * This work is provided "as is"; redistribution and modification + * in whole or in part, in any medium, physical or electronic is + * permitted without restriction. + * + * This work is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * In no event shall the authors or contributors be liable for any + * direct, indirect, incidental, special, exemplary, or consequential + * damages (including, but not limited to, procurement of substitute + * goods or services; loss of use, data, or profits; or business + * interruption) however caused and on any theory of liability, whether + * in contract, strict liability, or tort (including negligence or + * otherwise) arising in any way out of the use of this software, even + * if advised of the possibility of such damage. + * + * Author: Matthias Clasen + */ + +#include "glib.h" +#include + +static void +test_profiler (void) +{ + if (g_test_subprocess ()) + { + gpointer p; + g_mem_set_vtable (glib_mem_profiler_table); + p = g_malloc (100); + p = g_realloc (p, 200); + g_free (p); + p = g_malloc0 (1000); + g_free (p); + p = g_try_malloc (2000); + p = g_try_realloc (p, 3000); + g_free (p); + p = g_malloc (0); + p = g_malloc0 (0); + p = g_realloc (NULL, 0); + p = g_try_malloc (0); + p = g_try_realloc (NULL, 0); + g_mem_profile (); + exit (0); + } + g_test_trap_subprocess (NULL, 0, 0); + g_test_trap_assert_passed (); + g_test_trap_assert_stdout ("*GLib Memory statistics*"); +} + +static void +test_fallback_calloc (void) +{ + if (g_test_subprocess ()) + { + GMemVTable vtable = { malloc, realloc, free, NULL, NULL, NULL }; + gpointer p; + + g_mem_set_vtable (&vtable); + p = g_malloc0 (1000); + g_free (p); + exit (0); + } + g_test_trap_subprocess (NULL, 0, 0); + g_test_trap_assert_passed (); +} + +static void +test_incomplete_vtable (void) +{ + if (g_test_subprocess ()) + { + GMemVTable vtable = { malloc, realloc, NULL, NULL, NULL, NULL }; + gpointer p; + + g_mem_set_vtable (&vtable); + p = g_malloc0 (1000); + g_free (p); + exit (0); + } + g_test_trap_subprocess (NULL, 0, 0); + g_test_trap_assert_failed (); + g_test_trap_assert_stderr ("*lacks one of*"); +} + +static void +test_double_vtable (void) +{ + if (g_test_subprocess ()) + { + GMemVTable vtable = { malloc, realloc, free, NULL, NULL, NULL }; + + g_mem_set_vtable (&vtable); + g_mem_set_vtable (&vtable); + exit (0); + } + g_test_trap_subprocess (NULL, 0, 0); + g_test_trap_assert_failed (); + g_test_trap_assert_stderr ("*can only be set once*"); +} + +int +main (int argc, char *argv[]) +{ + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/malloc/incomplete-vtable", test_incomplete_vtable); + g_test_add_func ("/malloc/double-vtable", test_double_vtable); + g_test_add_func ("/malloc/fallback-calloc", test_fallback_calloc); + g_test_add_func ("/malloc/profiler", test_profiler); + + return g_test_run (); +}