summaryrefslogtreecommitdiffstats
path: root/jemalloc/test
diff options
context:
space:
mode:
authorJason Evans <je@facebook.com>2010-09-17 22:46:18 (GMT)
committerJason Evans <je@facebook.com>2010-09-17 22:46:18 (GMT)
commit8e3c3c61b5bb676a705450708e7e79698cdc9e0c (patch)
tree5cb1ffd5b3cb231a9f69ae40b7bba8351455c2ea /jemalloc/test
parent4cc6a60a4f3ee481bdde233d6fa72e256cb9477a (diff)
downloadjemalloc-8e3c3c61b5bb676a705450708e7e79698cdc9e0c.zip
jemalloc-8e3c3c61b5bb676a705450708e7e79698cdc9e0c.tar.gz
jemalloc-8e3c3c61b5bb676a705450708e7e79698cdc9e0c.tar.bz2
Add {,r,s,d}allocm().
Add allocm(), rallocm(), sallocm(), and dallocm(), which are a functional superset of malloc(), calloc(), posix_memalign(), malloc_usable_size(), and free().
Diffstat (limited to 'jemalloc/test')
-rw-r--r--jemalloc/test/allocm.c133
-rw-r--r--jemalloc/test/allocm.exp25
-rw-r--r--jemalloc/test/posix_memalign.c5
-rw-r--r--jemalloc/test/rallocm.c117
-rw-r--r--jemalloc/test/rallocm.exp2
5 files changed, 279 insertions, 3 deletions
diff --git a/jemalloc/test/allocm.c b/jemalloc/test/allocm.c
new file mode 100644
index 0000000..4367cb8
--- /dev/null
+++ b/jemalloc/test/allocm.c
@@ -0,0 +1,133 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#define JEMALLOC_MANGLE
+#include "jemalloc/jemalloc.h"
+
+#define CHUNK 0x400000
+/* #define MAXALIGN ((size_t)0x80000000000LLU) */
+#define MAXALIGN ((size_t)0x2000000LLU)
+#define NITER 4
+
+int
+main(void)
+{
+ int r;
+ void *p;
+ size_t sz, alignment, total, tsz;
+ unsigned i;
+ void *ps[NITER];
+
+ fprintf(stderr, "Test begin\n");
+
+ sz = 0;
+ r = JEMALLOC_P(allocm)(&p, &sz, 42, 0);
+ if (r != ALLOCM_SUCCESS) {
+ fprintf(stderr, "Unexpected allocm() error\n");
+ abort();
+ }
+ if (sz < 42)
+ fprintf(stderr, "Real size smaller than expected\n");
+ if (JEMALLOC_P(dallocm)(p, 0) != ALLOCM_SUCCESS)
+ fprintf(stderr, "Unexpected dallocm() error\n");
+
+ r = JEMALLOC_P(allocm)(&p, NULL, 42, 0);
+ if (r != ALLOCM_SUCCESS) {
+ fprintf(stderr, "Unexpected allocm() error\n");
+ abort();
+ }
+ if (JEMALLOC_P(dallocm)(p, 0) != ALLOCM_SUCCESS)
+ fprintf(stderr, "Unexpected dallocm() error\n");
+
+ r = JEMALLOC_P(allocm)(&p, NULL, 42, ALLOCM_ZERO);
+ if (r != ALLOCM_SUCCESS) {
+ fprintf(stderr, "Unexpected allocm() error\n");
+ abort();
+ }
+ if (JEMALLOC_P(dallocm)(p, 0) != ALLOCM_SUCCESS)
+ fprintf(stderr, "Unexpected dallocm() error\n");
+
+#if LG_SIZEOF_PTR == 3
+ alignment = 0x8000000000000000LLU;
+ sz = 0x8000000000000000LLU;
+#else
+ alignment = 0x80000000LU;
+ sz = 0x80000000LU;
+#endif
+ r = JEMALLOC_P(allocm)(&p, NULL, sz, ALLOCM_ALIGN(alignment));
+ if (r == ALLOCM_SUCCESS) {
+ fprintf(stderr,
+ "Expected error for allocm(&p, %zu, 0x%x)\n",
+ sz, ALLOCM_ALIGN(alignment));
+ }
+
+#if LG_SIZEOF_PTR == 3
+ alignment = 0x4000000000000000LLU;
+ sz = 0x8400000000000001LLU;
+#else
+ alignment = 0x40000000LU;
+ sz = 0x84000001LU;
+#endif
+ r = JEMALLOC_P(allocm)(&p, NULL, sz, ALLOCM_ALIGN(alignment));
+ if (r == ALLOCM_SUCCESS) {
+ fprintf(stderr,
+ "Expected error for allocm(&p, %zu, 0x%x)\n",
+ sz, ALLOCM_ALIGN(alignment));
+ }
+
+ alignment = 0x10LLU;
+#if LG_SIZEOF_PTR == 3
+ sz = 0xfffffffffffffff0LLU;
+#else
+ sz = 0xfffffff0LU;
+#endif
+ r = JEMALLOC_P(allocm)(&p, NULL, sz, ALLOCM_ALIGN(alignment));
+ if (r == ALLOCM_SUCCESS) {
+ fprintf(stderr,
+ "Expected error for allocm(&p, %zu, 0x%x)\n",
+ sz, ALLOCM_ALIGN(alignment));
+ }
+
+ for (i = 0; i < NITER; i++)
+ ps[i] = NULL;
+
+ for (alignment = 8;
+ alignment <= MAXALIGN;
+ alignment <<= 1) {
+ total = 0;
+ fprintf(stderr, "Alignment: %zu\n", alignment);
+ for (sz = 1;
+ sz < 3 * alignment && sz < (1U << 31);
+ sz += (alignment >> (LG_SIZEOF_PTR-1)) - 1) {
+ for (i = 0; i < NITER; i++) {
+ r = JEMALLOC_P(allocm)(&ps[i], NULL, sz,
+ ALLOCM_ALIGN(alignment) | ALLOCM_ZERO);
+ if (r != ALLOCM_SUCCESS) {
+ fprintf(stderr,
+ "Error for size %zu (0x%zx): %d\n",
+ sz, sz, r);
+ exit(1);
+ }
+ if ((uintptr_t)p & (alignment-1)) {
+ fprintf(stderr,
+ "%p inadequately aligned for"
+ " alignment: %zu\n", p, alignment);
+ }
+ JEMALLOC_P(sallocm)(ps[i], &tsz, 0);
+ total += tsz;
+ if (total >= (MAXALIGN << 1))
+ break;
+ }
+ for (i = 0; i < NITER; i++) {
+ if (ps[i] != NULL) {
+ JEMALLOC_P(dallocm)(ps[i], 0);
+ ps[i] = NULL;
+ }
+ }
+ }
+ }
+
+ fprintf(stderr, "Test end\n");
+ return (0);
+}
diff --git a/jemalloc/test/allocm.exp b/jemalloc/test/allocm.exp
new file mode 100644
index 0000000..b5061c7
--- /dev/null
+++ b/jemalloc/test/allocm.exp
@@ -0,0 +1,25 @@
+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
+Test end
diff --git a/jemalloc/test/posix_memalign.c b/jemalloc/test/posix_memalign.c
index cd3cadc..c5651d7 100644
--- a/jemalloc/test/posix_memalign.c
+++ b/jemalloc/test/posix_memalign.c
@@ -7,7 +7,7 @@
#define JEMALLOC_MANGLE
#include "jemalloc/jemalloc.h"
-#define CHUNK 0x100000
+#define CHUNK 0x400000
/* #define MAXALIGN ((size_t)0x80000000000LLU) */
#define MAXALIGN ((size_t)0x2000000LLU)
#define NITER 4
@@ -117,6 +117,5 @@ main(void)
}
fprintf(stderr, "Test end\n");
-
- return 0;
+ return (0);
}
diff --git a/jemalloc/test/rallocm.c b/jemalloc/test/rallocm.c
new file mode 100644
index 0000000..b52bdb2
--- /dev/null
+++ b/jemalloc/test/rallocm.c
@@ -0,0 +1,117 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define JEMALLOC_MANGLE
+#include "jemalloc/jemalloc.h"
+
+int
+main(void)
+{
+ void *p, *q;
+ size_t sz, tsz;
+ int r;
+
+ fprintf(stderr, "Test begin\n");
+
+ r = allocm(&p, &sz, 42, 0);
+ if (r != ALLOCM_SUCCESS) {
+ fprintf(stderr, "Unexpected allocm() error\n");
+ abort();
+ }
+
+ q = p;
+ r = rallocm(&q, &tsz, sz, 0, ALLOCM_NO_MOVE);
+ if (r != ALLOCM_SUCCESS)
+ fprintf(stderr, "Unexpected rallocm() error\n");
+ if (q != p)
+ fprintf(stderr, "Unexpected object move\n");
+ if (tsz != sz) {
+ fprintf(stderr, "Unexpected size change: %zu --> %zu\n",
+ sz, tsz);
+ }
+
+ q = p;
+ r = rallocm(&q, &tsz, sz, 5, ALLOCM_NO_MOVE);
+ if (r != ALLOCM_SUCCESS)
+ fprintf(stderr, "Unexpected rallocm() error\n");
+ if (q != p)
+ fprintf(stderr, "Unexpected object move\n");
+ if (tsz != sz) {
+ fprintf(stderr, "Unexpected size change: %zu --> %zu\n",
+ sz, tsz);
+ }
+
+ q = p;
+ r = rallocm(&q, &tsz, sz + 5, 0, ALLOCM_NO_MOVE);
+ if (r != ALLOCM_ERR_NOT_MOVED)
+ fprintf(stderr, "Unexpected rallocm() result\n");
+ if (q != p)
+ fprintf(stderr, "Unexpected object move\n");
+ if (tsz != sz) {
+ fprintf(stderr, "Unexpected size change: %zu --> %zu\n",
+ sz, tsz);
+ }
+
+ q = p;
+ r = rallocm(&q, &tsz, sz + 5, 0, 0);
+ if (r != ALLOCM_SUCCESS)
+ fprintf(stderr, "Unexpected rallocm() error\n");
+ if (q == p)
+ fprintf(stderr, "Expected object move\n");
+ if (tsz == sz) {
+ fprintf(stderr, "Expected size change: %zu --> %zu\n",
+ sz, tsz);
+ }
+ p = q;
+ sz = tsz;
+
+ r = rallocm(&q, &tsz, 8192, 0, 0);
+ if (r != ALLOCM_SUCCESS)
+ fprintf(stderr, "Unexpected rallocm() error\n");
+ if (q == p)
+ fprintf(stderr, "Expected object move\n");
+ if (tsz == sz) {
+ fprintf(stderr, "Expected size change: %zu --> %zu\n",
+ sz, tsz);
+ }
+ p = q;
+ sz = tsz;
+
+ r = rallocm(&q, &tsz, 16384, 0, 0);
+ if (r != ALLOCM_SUCCESS)
+ fprintf(stderr, "Unexpected rallocm() error\n");
+ if (tsz == sz) {
+ fprintf(stderr, "Expected size change: %zu --> %zu\n",
+ sz, tsz);
+ }
+ p = q;
+ sz = tsz;
+
+ r = rallocm(&q, &tsz, 8192, 0, ALLOCM_NO_MOVE);
+ if (r != ALLOCM_SUCCESS)
+ fprintf(stderr, "Unexpected rallocm() error\n");
+ if (q != p)
+ fprintf(stderr, "Unexpected object move\n");
+ if (tsz == sz) {
+ fprintf(stderr, "Expected size change: %zu --> %zu\n",
+ sz, tsz);
+ }
+ sz = tsz;
+
+ r = rallocm(&q, &tsz, 16384, 0, ALLOCM_NO_MOVE);
+ if (r != ALLOCM_SUCCESS)
+ fprintf(stderr, "Unexpected rallocm() error\n");
+ if (q != p)
+ fprintf(stderr, "Unexpected object move\n");
+ if (tsz == sz) {
+ fprintf(stderr, "Expected size change: %zu --> %zu\n",
+ sz, tsz);
+ }
+ sz = tsz;
+
+ dallocm(p, 0);
+
+ fprintf(stderr, "Test end\n");
+ return (0);
+}
diff --git a/jemalloc/test/rallocm.exp b/jemalloc/test/rallocm.exp
new file mode 100644
index 0000000..369a88d
--- /dev/null
+++ b/jemalloc/test/rallocm.exp
@@ -0,0 +1,2 @@
+Test begin
+Test end