>From fd8403522f26c5dca64fcc29bcf4c6b4c5b08335 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Tue, 21 Jul 2020 10:04:36 +0200 Subject: [PATCH 2/2] aligned-malloc: Add tests. * tests/test-aligned-malloc.c: New file. * modules/aligned-malloc-tests: New file. --- ChangeLog | 4 ++ modules/aligned-malloc-tests | 11 +++++ tests/test-aligned-malloc.c | 102 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 modules/aligned-malloc-tests create mode 100644 tests/test-aligned-malloc.c diff --git a/ChangeLog b/ChangeLog index 768b209..8da483c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2020-07-21 Bruno Haible + aligned-malloc: Add tests. + * tests/test-aligned-malloc.c: New file. + * modules/aligned-malloc-tests: New file. + aligned-malloc: New module. * lib/aligned-malloc.h: New file. * m4/malloc-align.m4: New file. diff --git a/modules/aligned-malloc-tests b/modules/aligned-malloc-tests new file mode 100644 index 0000000..4d60549 --- /dev/null +++ b/modules/aligned-malloc-tests @@ -0,0 +1,11 @@ +Files: +tests/test-aligned-malloc.c +tests/macros.h + +Depends-on: + +configure.ac: + +Makefile.am: +TESTS += test-aligned-malloc +check_PROGRAMS += test-aligned-malloc diff --git a/tests/test-aligned-malloc.c b/tests/test-aligned-malloc.c new file mode 100644 index 0000000..6368746 --- /dev/null +++ b/tests/test-aligned-malloc.c @@ -0,0 +1,102 @@ +/* Test of allocating memory with given alignment. + + Copyright (C) 2020 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2020. */ + +#include + +#include +#include + +#define ALIGNMENT 4 +#define aligned_malloc aligned4_malloc +#define aligned_free aligned4_free +#include "aligned-malloc.h" +#undef aligned_free +#undef aligned_malloc +#undef ALIGNMENT + +#define ALIGNMENT 8 +#define aligned_malloc aligned8_malloc +#define aligned_free aligned8_free +#include "aligned-malloc.h" +#undef aligned_free +#undef aligned_malloc +#undef ALIGNMENT + +#define ALIGNMENT 16 +#define aligned_malloc aligned16_malloc +#define aligned_free aligned16_free +#include "aligned-malloc.h" +#undef aligned_free +#undef aligned_malloc +#undef ALIGNMENT + +#define ALIGNMENT 32 +#define aligned_malloc aligned32_malloc +#define aligned_free aligned32_free +#include "aligned-malloc.h" +#undef aligned_free +#undef aligned_malloc +#undef ALIGNMENT + +#include + +#include "macros.h" + +int +main (int argc, char *argv[]) +{ + static size_t sizes[] = + { 13, 8, 17, 450, 320, 1, 99, 4, 15, 16, 2, 76, 37, 127, 2406, 641 }; + void *aligned4_blocks[SIZEOF (sizes)]; + void *aligned8_blocks[SIZEOF (sizes)]; + void *aligned16_blocks[SIZEOF (sizes)]; + void *aligned32_blocks[SIZEOF (sizes)]; + size_t i; + + for (i = 0; i < SIZEOF (sizes); i++) + { + size_t size = sizes[i]; + + aligned4_blocks[i] = aligned4_malloc (size); + ASSERT (((uintptr_t) aligned4_blocks[i] % 4) == 0); + memset (aligned4_blocks[i], 'w', size); + + aligned8_blocks[i] = aligned8_malloc (size); + ASSERT (((uintptr_t) aligned8_blocks[i] % 8) == 0); + memset (aligned8_blocks[i], 'x', size); + + aligned16_blocks[i] = aligned16_malloc (size); + ASSERT (((uintptr_t) aligned16_blocks[i] % 16) == 0); + memset (aligned16_blocks[i], 'y', size); + + aligned32_blocks[i] = aligned32_malloc (size); + ASSERT (((uintptr_t) aligned32_blocks[i] % 32) == 0); + memset (aligned32_blocks[i], 'z', size); + } + + for (i = 0; i < SIZEOF (sizes); i++) + { + aligned4_free (aligned4_blocks[i]); + aligned8_free (aligned8_blocks[i]); + aligned16_free (aligned16_blocks[i]); + aligned32_free (aligned32_blocks[i]); + } + + return 0; +} -- 2.7.4