From 58a6f5c9bef785ecff33fff7e56343ea6c482d56 Mon Sep 17 00:00:00 2001 From: Jason Evans Date: Sat, 11 Sep 2010 20:59:16 -0700 Subject: [PATCH] Add posix_memalign test. --- jemalloc/Makefile.in | 2 +- jemalloc/test/posix_memalign.c | 123 +++++++++++++++++++++++++++++++ jemalloc/test/posix_memalign.exp | 30 ++++++++ 3 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 jemalloc/test/posix_memalign.c create mode 100644 jemalloc/test/posix_memalign.exp diff --git a/jemalloc/Makefile.in b/jemalloc/Makefile.in index aa3bf6bd..0795d3aa 100644 --- a/jemalloc/Makefile.in +++ b/jemalloc/Makefile.in @@ -58,7 +58,7 @@ DSOS := @objroot@lib/libjemalloc@install_suffix@.$(SO).$(REV) \ @objroot@lib/libjemalloc@install_suffix@.$(SO) \ @objroot@lib/libjemalloc@install_suffix@_pic.a MAN3 := @objroot@doc/jemalloc@install_suffix@.3 -CTESTS := @srcroot@test/thread_arena.c +CTESTS := @srcroot@test/posix_memalign.c @srcroot@test/thread_arena.c .PHONY: all dist install check clean distclean relclean diff --git a/jemalloc/test/posix_memalign.c b/jemalloc/test/posix_memalign.c new file mode 100644 index 00000000..0f2c879c --- /dev/null +++ b/jemalloc/test/posix_memalign.c @@ -0,0 +1,123 @@ +#include +#include +#include +#include +#include + +#define JEMALLOC_MANGLE +#include "jemalloc/jemalloc.h" + +#define CHUNK 0x100000 +/* #define MAXALIGN ((size_t)0x80000000000LLU) */ +#define MAXALIGN ((size_t)0x40000000LLU) +#define NITER 4 + +int +main(void) +{ + size_t alignment, size, total; + unsigned i; + int err; + void *p, *ps[NITER]; + + fprintf(stderr, "Test begin\n"); + + /* Test error conditions. */ + for (alignment = 0; alignment < sizeof(void *); alignment++) { + err = JEMALLOC_P(posix_memalign)(&p, alignment, 1); + if (err != EINVAL) { + fprintf(stderr, + "Expected error for invalid alignment %zu\n", + alignment); + } + } + + for (alignment = sizeof(size_t); alignment < MAXALIGN; + alignment <<= 1) { + err = JEMALLOC_P(posix_memalign)(&p, alignment + 1, 1); + if (err == 0) { + fprintf(stderr, + "Expected error for invalid alignment %zu\n", + alignment + 1); + } + } + +#if LG_SIZEOF_PTR == 3 + alignment = 0x8000000000000000LLU; + size = 0x8000000000000000LLU; +#else + alignment = 0x8000 0000LU; + size = 0x8000 0000LU; +#endif + err = JEMALLOC_P(posix_memalign)(&p, alignment, size); + if (err == 0) { + fprintf(stderr, + "Expected error for posix_memalign(&p, %zu, %zu)\n", + alignment, size); + } + +#if LG_SIZEOF_PTR == 3 + alignment = 0x4000000000000000LLU; + size = 0x8400000000000001LLU; +#else + alignment = 0x40000000LU; + size = 0x84000001LU; +#endif + err = JEMALLOC_P(posix_memalign)(&p, alignment, size); + if (err == 0) { + fprintf(stderr, + "Expected error for posix_memalign(&p, %zu, %zu)\n", + alignment, size); + } + + alignment = 0x10LLU; +#if LG_SIZEOF_PTR == 3 + size = 0xfffffffffffffff0LLU; +#else + size = 0xfffffff0LU; +#endif + err = JEMALLOC_P(posix_memalign)(&p, alignment, size); + if (err == 0) { + fprintf(stderr, + "Expected error for posix_memalign(&p, %zu, %zu)\n", + alignment, size); + } + + for (i = 0; i < NITER; i++) + ps[i] = NULL; + + for (alignment = sizeof(void *); + alignment <= MAXALIGN; + alignment <<= 1) { + total = 0; + fprintf(stderr, "Alignment: %zu\n", alignment); + for (size = 1; + size < 3 * alignment && size < (1U << 31); + size += (alignment >> 2) - 1) { + for (i = 0; i < NITER; i++) { + err = JEMALLOC_P(posix_memalign)(&ps[i], + alignment, size); + if (err) { + fprintf(stderr, + "Error for size 0x%x %zu : %s\n", + (unsigned)size, size, + strerror(err)); + exit(1); + } + total += JEMALLOC_P(malloc_usable_size)(ps[i]); + if (total >= (MAXALIGN << 1)) + break; + } + for (i = 0; i < NITER; i++) { + if (ps[i] != NULL) { + JEMALLOC_P(free)(ps[i]); + ps[i] = NULL; + } + } + } + } + + fprintf(stderr, "Test end\n"); + + return 0; +} diff --git a/jemalloc/test/posix_memalign.exp b/jemalloc/test/posix_memalign.exp new file mode 100644 index 00000000..f815b2fe --- /dev/null +++ b/jemalloc/test/posix_memalign.exp @@ -0,0 +1,30 @@ +Test begin +Alignment: 8 +Alignment: 16 +Alignment: 32 +Alignment: 64 +Alignment: 128 +Alignment: 256 +Alignment: 512 +Alignment: 1024 +Alignment: 2048 +Alignment: 4096 +Alignment: 8192 +Alignment: 16384 +Alignment: 32768 +Alignment: 65536 +Alignment: 131072 +Alignment: 262144 +Alignment: 524288 +Alignment: 1048576 +Alignment: 2097152 +Alignment: 4194304 +Alignment: 8388608 +Alignment: 16777216 +Alignment: 33554432 +Alignment: 67108864 +Alignment: 134217728 +Alignment: 268435456 +Alignment: 536870912 +Alignment: 1073741824 +Test end