summaryrefslogtreecommitdiff
path: root/test/integration/mremap.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/integration/mremap.c')
-rw-r--r--test/integration/mremap.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/test/integration/mremap.c b/test/integration/mremap.c
new file mode 100644
index 00000000..a7fb7ef0
--- /dev/null
+++ b/test/integration/mremap.c
@@ -0,0 +1,45 @@
+#include "test/jemalloc_test.h"
+
+TEST_BEGIN(test_mremap)
+{
+ int err;
+ size_t sz, lg_chunk, chunksize, i;
+ char *p, *q;
+
+ sz = sizeof(lg_chunk);
+ err = mallctl("opt.lg_chunk", &lg_chunk, &sz, NULL, 0);
+ assert_d_eq(err, 0, "Error in mallctl(): %s", strerror(err));
+ chunksize = ((size_t)1U) << lg_chunk;
+
+ p = (char *)malloc(chunksize);
+ assert_ptr_not_null(p, "malloc(%zu) --> %p", chunksize, p);
+ memset(p, 'a', chunksize);
+
+ q = (char *)realloc(p, chunksize * 2);
+ assert_ptr_not_null(q, "realloc(%p, %zu) --> %p", p, chunksize * 2,
+ q);
+ for (i = 0; i < chunksize; i++) {
+ assert_c_eq(q[i], 'a',
+ "realloc() should preserve existing bytes across copies");
+ }
+
+ p = q;
+
+ q = (char *)realloc(p, chunksize);
+ assert_ptr_not_null(q, "realloc(%p, %zu) --> %p", p, chunksize, q);
+ for (i = 0; i < chunksize; i++) {
+ assert_c_eq(q[i], 'a',
+ "realloc() should preserve existing bytes across copies");
+ }
+
+ free(q);
+}
+TEST_END
+
+int
+main(void)
+{
+
+ return (test(
+ test_mremap));
+}