| #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)); |
| } |