1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-27 16:51:06 -07:00
emacs/mps/src/locv.c
Pekka Pirinen 22f24c557c Update space->arena
Copied from Perforce
 Change: 19186
 ServerID: perforce.ravenbrook.com
1998-01-11 00:40:14 +00:00

149 lines
3.2 KiB
C

/* impl.c.locv: Leaf Object Pool Class Coverage Test
*
* $HopeName: MMsrc!locv.c(trunk.14) $
*
* Copyright (C) 1996,1997, 1998 Harlequin Group, all rights reserved
*
* This is (not much of) a coverage test for the Leaf Object
* pool (PoolClassLO).
*
* .hack.stdio: On platform.sus8lc the assert macro in assert.h uses
* stderr without declaring it. Therefore using the assert macro will
* not work unless stderr has been declared by #including <stdio.h>.
*/
#include "testlib.h"
#include "mps.h"
#include "mpsclo.h"
#include "mpsavm.h"
#include <assert.h>
#ifdef MPS_PF_SUS8LC
#include <stdio.h> /* .hack.stdio */
#endif
#define testArenaSIZE ((size_t)16<<20)
static mps_res_t scan(mps_ss_t ss, mps_addr_t base, mps_addr_t limit);
static mps_addr_t skip(mps_addr_t object);
static void move(mps_addr_t object, mps_addr_t to);
static mps_addr_t isMoved(mps_addr_t object);
static void copy(mps_addr_t old, mps_addr_t new);
static void pad(mps_addr_t base, size_t size);
static mps_fmt_A_s locv_fmt =
{
(mps_align_t)4,
scan,
skip,
copy,
move,
isMoved,
pad
};
static mps_addr_t roots[4];
int main(void)
{
mps_arena_t arena;
mps_pool_t pool;
mps_fmt_t format;
mps_ap_t ap;
mps_addr_t p;
mps_bool_t b;
mps_root_t root;
die(mps_arena_create(&arena, mps_arena_class_vm(), testArenaSIZE),
"mps_arena_create");
die(mps_root_create_table(&root, arena, MPS_RANK_EXACT,
(mps_rm_t)0,
roots, (sizeof(roots)/sizeof(*roots))),
"RootCreate");
die(mps_fmt_create_A(&format, arena, &locv_fmt), "FormatCreate");
die(mps_pool_create(&pool, arena, mps_class_lo(), format), "LOCreate");
die(mps_ap_create(&ap, pool, MPS_RANK_EXACT), "APCreate");
die(mps_reserve(&p, ap, (size_t)4), "mps_reserve");
*(mps_word_t *)p = 4;
b = mps_commit(ap, p, (size_t)4);
assert(b);
die(mps_reserve(&roots[1], ap, (size_t)8), "mps_reserve");
p = roots[1];
*(mps_word_t *)p = 8;
b = mps_commit(ap, p, (size_t)8);
assert(b);
die(mps_reserve(&p, ap, (size_t)4096), "mps_reserve");
*(mps_word_t *)p = 4096;
b = mps_commit(ap, p, (size_t)4096);
assert(b);
die(mps_reserve(&p, ap, (size_t)4), "mps_reserve");
*(mps_word_t *)p = 4;
b = mps_commit(ap, p, (size_t)4);
assert(b);
mps_ap_destroy(ap);
mps_pool_destroy(pool);
mps_fmt_destroy(format);
mps_root_destroy(root);
mps_arena_destroy(arena);
return 0;
}
static mps_res_t scan(mps_ss_t ss, mps_addr_t base, mps_addr_t limit)
{
testlib_unused(ss);
testlib_unused(base);
testlib_unused(limit);
die(MPS_RES_FAIL, "Error in Test, scan called unexpectedly");
return MPS_RES_FAIL;
}
static mps_addr_t skip(mps_addr_t object)
{
size_t bytes;
bytes = (size_t)(*(mps_word_t *)object);
return (mps_addr_t)((char *)object + bytes);
}
static void move(mps_addr_t object, mps_addr_t to)
{
testlib_unused(object);
testlib_unused(to);
assert(0);
}
static mps_addr_t isMoved(mps_addr_t object)
{
testlib_unused(object);
assert(0);
return (mps_addr_t)NULL;
}
static void copy(mps_addr_t old, mps_addr_t new)
{
testlib_unused(old);
testlib_unused(new);
assert(0);
}
static void pad(mps_addr_t base, size_t size)
{
testlib_unused(base);
testlib_unused(size);
assert(0);
}