/*
TEST_HEADER
id = $HopeName$
summary = try to allocate as large an object as will succeed
language = c
link = testlib.o
OUTPUT_SPEC
maxsize > 100000000
END_HEADER
*/
#include "testlib.h"
#include "mpscmv.h"
mps_space_t space;
mps_pool_t pool;
mps_addr_t q;
static mps_res_t trysize(size_t try) {
mps_res_t res;
die(mps_pool_create(&pool, space, mps_class_mv(),
1024*32, 1024*16, 1024*256), "pool");
comment("Trying %x", try);
res = mps_alloc(&q, pool, try);
mps_pool_destroy(pool);
comment("%s", err_text(res));
return res;
}
static void test(void) {
size_t inf, sup, try;
die(mps_space_create(&space), "create");
inf = 0;
sup = 1024*1024*1000; /* i.e. 1 gigabyte */
while (sup-inf > 1) {
try = inf + (sup-inf)/2;
if (trysize(try) == MPS_RES_OK) {
inf = try;
} else {
sup = try;
}
}
for (try = inf-4; try < inf+4; try++)
(void) trysize(try);
report("maxsize", "%lu", (unsigned long) inf);
}
int main(void) {
easy_tramp(test);
pass();
return 0;
}