Message ID | 1396953264-6020-1-git-send-email-will.newton@linaro.org |
---|---|
State | Accepted |
Headers | show |
On 8 April 2014 11:34, Will Newton <will.newton@linaro.org> wrote: > ChangeLog: > > 2014-04-08 Will Newton <will.newton@linaro.org> > > * malloc/Makefile (tests): Add tst-mallopt. > * malloc/tst-mallopt.c: New file. > --- > malloc/Makefile | 2 +- > malloc/tst-mallopt.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 76 insertions(+), 1 deletion(-) > create mode 100644 malloc/tst-mallopt.c Ping? This API is pretty tricky to test well as it doesn't reliably signal errors, but this test does give the function a simple workout. > diff --git a/malloc/Makefile b/malloc/Makefile > index 2871726..d962331 100644 > --- a/malloc/Makefile > +++ b/malloc/Makefile > @@ -27,7 +27,7 @@ headers := $(dist-headers) obstack.h mcheck.h > tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \ > tst-mallocstate tst-mcheck tst-mallocfork tst-trim1 \ > tst-malloc-usable tst-realloc tst-posix_memalign \ > - tst-pvalloc tst-memalign > + tst-pvalloc tst-memalign tst-mallopt > test-srcs = tst-mtrace > > routines = malloc morecore mcheck mtrace obstack > diff --git a/malloc/tst-mallopt.c b/malloc/tst-mallopt.c > new file mode 100644 > index 0000000..9569b7d > --- /dev/null > +++ b/malloc/tst-mallopt.c > @@ -0,0 +1,75 @@ > +/* Copyright (C) 2014 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library 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. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + <http://www.gnu.org/licenses/>. */ > + > +#include <malloc.h> > +#include <stdio.h> > +#include <string.h> > + > +static int errors = 0; > + > +static void > +merror (const char *msg) > +{ > + ++errors; > + printf ("Error: %s\n", msg); > +} > + > +static int > +do_test (void) > +{ > + int ret; > + > + ret = mallopt(M_CHECK_ACTION, 1); > + > + if (ret != 1) > + merror ("mallopt (M_CHECK_ACTION, 1) failed."); > + > + ret = mallopt(M_MMAP_MAX, 64*1024); > + > + if (ret != 1) > + merror ("mallopt (M_MMAP_MAX, 64*1024) failed."); > + > + ret = mallopt(M_MMAP_THRESHOLD, 64*1024); > + > + if (ret != 1) > + merror ("mallopt (M_MMAP_THRESHOLD, 64*1024) failed."); > + > + ret = mallopt(M_MXFAST, 0); > + > + if (ret != 1) > + merror ("mallopt (M_MXFAST, 0) failed."); > + > + ret = mallopt(M_PERTURB, 0xa5); > + > + if (ret != 1) > + merror ("mallopt (M_PERTURB, 0xa5) failed."); > + > + ret = mallopt(M_TOP_PAD, 64*1024); > + > + if (ret != 1) > + merror ("mallopt (M_TOP_PAD, 64*1024) failed."); > + > + ret = mallopt(M_TRIM_THRESHOLD, -1); > + > + if (ret != 1) > + merror ("mallopt (M_TRIM_THRESHOLD, -1) failed."); > + > + return errors != 0; > +} > + > +#define TEST_FUNCTION do_test () > +#include "../test-skeleton.c" > -- > 1.8.1.4 >
On Thu, May 01, 2014 at 08:54:56AM +0100, Will Newton wrote: > On 8 April 2014 11:34, Will Newton <will.newton@linaro.org> wrote: > > ChangeLog: > > > > 2014-04-08 Will Newton <will.newton@linaro.org> > > > > * malloc/Makefile (tests): Add tst-mallopt. > > * malloc/tst-mallopt.c: New file. > > --- > > malloc/Makefile | 2 +- > > malloc/tst-mallopt.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++ > > 2 files changed, 76 insertions(+), 1 deletion(-) > > create mode 100644 malloc/tst-mallopt.c > > Ping? > > This API is pretty tricky to test well as it doesn't reliably signal > errors, but this test does give the function a simple workout. ... which is a bug. The function should succeed only when it encounters valid parameters. This test looks good to me for the current implementation though, with the understanding that it will be enhanced when mallopt is fixed to correctly signal errors. Siddhesh > > > diff --git a/malloc/Makefile b/malloc/Makefile > > index 2871726..d962331 100644 > > --- a/malloc/Makefile > > +++ b/malloc/Makefile > > @@ -27,7 +27,7 @@ headers := $(dist-headers) obstack.h mcheck.h > > tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \ > > tst-mallocstate tst-mcheck tst-mallocfork tst-trim1 \ > > tst-malloc-usable tst-realloc tst-posix_memalign \ > > - tst-pvalloc tst-memalign > > + tst-pvalloc tst-memalign tst-mallopt > > test-srcs = tst-mtrace > > > > routines = malloc morecore mcheck mtrace obstack > > diff --git a/malloc/tst-mallopt.c b/malloc/tst-mallopt.c > > new file mode 100644 > > index 0000000..9569b7d > > --- /dev/null > > +++ b/malloc/tst-mallopt.c > > @@ -0,0 +1,75 @@ > > +/* Copyright (C) 2014 Free Software Foundation, Inc. > > + This file is part of the GNU C Library. > > + > > + The GNU C Library is free software; you can redistribute it and/or > > + modify it under the terms of the GNU Lesser General Public > > + License as published by the Free Software Foundation; either > > + version 2.1 of the License, or (at your option) any later version. > > + > > + The GNU C Library 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. See the GNU > > + Lesser General Public License for more details. > > + > > + You should have received a copy of the GNU Lesser General Public > > + License along with the GNU C Library; if not, see > > + <http://www.gnu.org/licenses/>. */ > > + > > +#include <malloc.h> > > +#include <stdio.h> > > +#include <string.h> > > + > > +static int errors = 0; > > + > > +static void > > +merror (const char *msg) > > +{ > > + ++errors; > > + printf ("Error: %s\n", msg); > > +} > > + > > +static int > > +do_test (void) > > +{ > > + int ret; > > + > > + ret = mallopt(M_CHECK_ACTION, 1); > > + > > + if (ret != 1) > > + merror ("mallopt (M_CHECK_ACTION, 1) failed."); > > + > > + ret = mallopt(M_MMAP_MAX, 64*1024); > > + > > + if (ret != 1) > > + merror ("mallopt (M_MMAP_MAX, 64*1024) failed."); > > + > > + ret = mallopt(M_MMAP_THRESHOLD, 64*1024); > > + > > + if (ret != 1) > > + merror ("mallopt (M_MMAP_THRESHOLD, 64*1024) failed."); > > + > > + ret = mallopt(M_MXFAST, 0); > > + > > + if (ret != 1) > > + merror ("mallopt (M_MXFAST, 0) failed."); > > + > > + ret = mallopt(M_PERTURB, 0xa5); > > + > > + if (ret != 1) > > + merror ("mallopt (M_PERTURB, 0xa5) failed."); > > + > > + ret = mallopt(M_TOP_PAD, 64*1024); > > + > > + if (ret != 1) > > + merror ("mallopt (M_TOP_PAD, 64*1024) failed."); > > + > > + ret = mallopt(M_TRIM_THRESHOLD, -1); > > + > > + if (ret != 1) > > + merror ("mallopt (M_TRIM_THRESHOLD, -1) failed."); > > + > > + return errors != 0; > > +} > > + > > +#define TEST_FUNCTION do_test () > > +#include "../test-skeleton.c" > > -- > > 1.8.1.4 > > > > > > -- > Will Newton > Toolchain Working Group, Linaro
diff --git a/malloc/Makefile b/malloc/Makefile index 2871726..d962331 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -27,7 +27,7 @@ headers := $(dist-headers) obstack.h mcheck.h tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \ tst-mallocstate tst-mcheck tst-mallocfork tst-trim1 \ tst-malloc-usable tst-realloc tst-posix_memalign \ - tst-pvalloc tst-memalign + tst-pvalloc tst-memalign tst-mallopt test-srcs = tst-mtrace routines = malloc morecore mcheck mtrace obstack diff --git a/malloc/tst-mallopt.c b/malloc/tst-mallopt.c new file mode 100644 index 0000000..9569b7d --- /dev/null +++ b/malloc/tst-mallopt.c @@ -0,0 +1,75 @@ +/* Copyright (C) 2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <malloc.h> +#include <stdio.h> +#include <string.h> + +static int errors = 0; + +static void +merror (const char *msg) +{ + ++errors; + printf ("Error: %s\n", msg); +} + +static int +do_test (void) +{ + int ret; + + ret = mallopt(M_CHECK_ACTION, 1); + + if (ret != 1) + merror ("mallopt (M_CHECK_ACTION, 1) failed."); + + ret = mallopt(M_MMAP_MAX, 64*1024); + + if (ret != 1) + merror ("mallopt (M_MMAP_MAX, 64*1024) failed."); + + ret = mallopt(M_MMAP_THRESHOLD, 64*1024); + + if (ret != 1) + merror ("mallopt (M_MMAP_THRESHOLD, 64*1024) failed."); + + ret = mallopt(M_MXFAST, 0); + + if (ret != 1) + merror ("mallopt (M_MXFAST, 0) failed."); + + ret = mallopt(M_PERTURB, 0xa5); + + if (ret != 1) + merror ("mallopt (M_PERTURB, 0xa5) failed."); + + ret = mallopt(M_TOP_PAD, 64*1024); + + if (ret != 1) + merror ("mallopt (M_TOP_PAD, 64*1024) failed."); + + ret = mallopt(M_TRIM_THRESHOLD, -1); + + if (ret != 1) + merror ("mallopt (M_TRIM_THRESHOLD, -1) failed."); + + return errors != 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c"