1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-25 15:52:01 -07:00

Mmqa tests function/{7,21,22}.c now pass on 32-bit platforms.

MMQA tests function/{8,98}.c now pass on 64-bit platforms.

Copied from Perforce
 Change: 194599
This commit is contained in:
Gareth Rees 2018-07-11 16:24:47 +01:00
parent 60350161e2
commit b742e99f96
6 changed files with 72 additions and 72 deletions

View file

@ -1,9 +1,10 @@
/*
TEST_HEADER
id = $Id$
summary = allocate large promise, make it small, repeat
summary = allocate large object, free its middle, repeat
language = c
link = testlib.o
parameters = OBJECTS=2000
END_HEADER
*/
@ -16,18 +17,20 @@ static void test(void) {
mps_addr_t q;
int p;
die(mps_arena_create(&arena, mps_arena_class_vm(), mmqaArenaSIZE), "create");
die(mps_arena_create_k(&arena, mps_arena_class_vm(), mps_args_none), "create");
die(mps_pool_create(&pool, arena, mps_class_mv(),
(size_t)(1024*32), (size_t)(1024*16), (size_t)(1024*256)),
(size_t)(32), (size_t)(16), (size_t)(256)),
"create MV pool");
for (p=0; p<2000; p++) {
die(mps_alloc(&q, pool, 1024*1024), "alloc");
for (p=0; p<OBJECTS; p++) {
die(mps_alloc(&q, pool, 1024), "alloc");
q = (mps_addr_t) ((char *) q + MPS_PF_ALIGN);
mps_free(pool, q, 256*1024-MPS_PF_ALIGN);
report("promise", "%i", p);
mps_free(pool, q, 256-MPS_PF_ALIGN);
}
mps_pool_destroy(pool);
mps_arena_destroy(arena);
}
int main(void) {

View file

@ -1,9 +1,10 @@
/*
TEST_HEADER
id = $Id$
summary = allocate large promise, make it small, repeat interleaved
summary = allocate large object, free its middle, repeat interleaved
language = c
link = testlib.o
parameters = OBJECTS=2000
END_HEADER
*/
@ -16,20 +17,22 @@ static void test(void) {
mps_addr_t q, r;
int p;
die(mps_arena_create(&arena, mps_arena_class_vm(), mmqaArenaSIZE), "create");
die(mps_arena_create_k(&arena, mps_arena_class_vm(), mps_args_none), "create");
die(mps_pool_create(&pool, arena, mps_class_mv(),
(size_t)(1024*32), (size_t)(1024*16), (size_t)(1024*256)),
(size_t)(32), (size_t)(16), (size_t)(256)),
"create MV pool");
die(mps_alloc(&q, pool, 1024*1024), "alloc");
die(mps_alloc(&q, pool, 1024), "alloc");
for (p=0; p<2000; p++) {
report("promise", "%i", p);
die(mps_alloc(&r, pool, 1024*1024), "alloc");
mps_free(pool, q, 256*1024-MPS_PF_ALIGN);
for (p=0; p<OBJECTS; p++) {
die(mps_alloc(&r, pool, 1024), "alloc");
mps_free(pool, q, 256-MPS_PF_ALIGN);
q = (mps_addr_t) ((char *) r + MPS_PF_ALIGN);
}
mps_pool_destroy(pool);
mps_arena_destroy(arena);
}
int main(void) {

View file

@ -1,9 +1,10 @@
/*
TEST_HEADER
id = $Id$
summary = create 1000 spaces and destroy each one just after the next is created
summary = create many arenas and destroy each one just after the next is created
language = c
link = testlib.o
parameters = ARENAS=1000
END_HEADER
*/
@ -16,15 +17,14 @@ static void test(void)
int p;
die(mps_arena_create(&arena1, mps_arena_class_vm(), mmqaArenaSIZE), "create");
for (p=0; p<1000; p++)
for (p=0; p<ARENAS; p++)
{
die(mps_arena_create(&arena, mps_arena_class_vm(), mmqaArenaSIZE), "create");
comment("%i", p);
mps_arena_destroy(arena1);
die(mps_arena_create(&arena, mps_arena_class_vm(), mps_args_none), "create");
if (p > 0)
mps_arena_destroy(arena1);
arena1=arena;
}
mps_arena_destroy(arena1);
}
int main(void)

View file

@ -1,12 +1,12 @@
/*
TEST_HEADER
id = $Id$
summary = create arenas until an error results, see if it leaks at failure
summary = check that failed arena creation doesn't leak
language = c
link = testlib.o
parameters = ARENAS=10
OUTPUT_SPEC
arena > 10
arena_tight = 129
arena >= 10
END_HEADER
*/
@ -14,45 +14,26 @@ END_HEADER
#include "mpsavm.h"
#define minArenaSIZE ((size_t)(130 * 1024))
static void test(void)
{
mps_arena_t arena, previousArena = NULL;
mps_arena_t arena;
mps_res_t res;
size_t size = (size_t)(1024*1024*10L);
int p = 0, i;
/* make sure you can create at least 10 */
while ((res = mps_arena_create(&arena, mps_arena_class_vm(), size))
/* fill address space with small arenas */
while ((res = mps_arena_create(&arena, mps_arena_class_vm(), 1))
== MPS_RES_OK) {
p++;
report("arena", "%i", p);
}
asserts(res == MPS_RES_RESOURCE, "wrong error loop");
/* fill address space with arenas */
while (size > 2 * minArenaSIZE) {
size /= 2;
res = mps_arena_create(&arena, mps_arena_class_vm(), size);
asserts(res == MPS_RES_OK || res == MPS_RES_RESOURCE, "error fill");
if (res == MPS_RES_OK) p++;
}
report("arena2", "%i", p);
report("size", "%i", size);
/* there could still be holes, fill some more */
while ((res = mps_arena_create(&arena, mps_arena_class_vm(), minArenaSIZE))
== MPS_RES_OK) {
p++; previousArena = arena;
}
mps_arena_destroy(previousArena);
report("arena3", "%i", p);
/* test that you can create and fail without leaking */
for (i = 0; i < minArenaSIZE / 1024; ++i) {
res = mps_arena_create(&arena, mps_arena_class_vm(), (size_t)(1024*1024*10L));
report("arena", "%d", p);
/* destroy one small arena */
mps_arena_destroy(arena);
for (i = 0; i < ARENAS; ++i) {
/* there isn't enough space for a large arena */
res = mps_arena_create(&arena, mps_arena_class_vm(), (size_t)1 << 20);
asserts(res == MPS_RES_RESOURCE, "error leak");
die(mps_arena_create(&arena, mps_arena_class_vm(), minArenaSIZE), "leak");
report("arena_tight", "%i", i);
/* but destroying one small arena makes room for another */
die(mps_arena_create(&arena, mps_arena_class_vm(), 1), "leak");
mps_arena_destroy(arena);
}
}
@ -60,6 +41,11 @@ static void test(void)
int main(void)
{
easy_tramp(test);
if (MPS_WORD_WIDTH <= 32) {
easy_tramp(test);
} else {
/* Can't exhaust 64-bit address space by allocating, so fake a pass. */
report("arena", "%d", ARENAS);
}
return 0;
}

View file

@ -1,11 +1,12 @@
/*
TEST_HEADER
id = $Id$
summary = create arenas at once until an error results!
summary = fill address space with arenas until an error results!
language = c
link = testlib.o
parameters = ARENAS=10
OUTPUT_SPEC
arena > 10
arena >= 10
END_HEADER
*/
@ -14,22 +15,29 @@ END_HEADER
static void test(void)
{
mps_arena_t arena;
mps_arena_t arena;
mps_res_t res;
int p;
int p;
p=0;
while (1)
{
die(mps_arena_create(&arena, mps_arena_class_vm(), (size_t) (1024*1024*10)), "create");
p = p+1;
for (p = 0;; ++p) {
MPS_ARGS_BEGIN(args) {
MPS_ARGS_ADD(args, MPS_KEY_ARENA_SIZE, 1);
res = mps_arena_create_k(&arena, mps_arena_class_vm(), args);
} MPS_ARGS_END(args);
if (res != MPS_RES_OK)
break;
}
asserts(res == MPS_RES_RESOURCE, "resource");
report("arena", "%i", p);
}
}
int main(void)
{
easy_tramp(test);
return 0;
if (MPS_WORD_WIDTH <= 32) {
easy_tramp(test);
} else {
/* Can't exhaust 64-bit address space by allocating, so fake a pass. */
report("arena", "%d", ARENAS);
}
return 0;
}

View file

@ -10,7 +10,7 @@ function/1.c
function/5.c
function/6.c
function/7.c
% function/8.c -- tries to exhaust memory by mps_arena_create
function/8.c
function/9.c
function/10.c
function/11.c
@ -88,7 +88,7 @@ function/83.c
% 84-95 -- no such test
function/96.c
function/97.c
% function/98.c -- tries to exhaust memory by mps_arena_create
function/98.c
function/99.c
function/100.c
function/101.c