diff --git a/mps/qa/function/102.c b/mps/qa/function/102.c new file mode 100644 index 00000000000..9b7e49fea12 --- /dev/null +++ b/mps/qa/function/102.c @@ -0,0 +1,174 @@ +/* TEST_HEADER + summary = EPDL allocation test + language = c + link = testlib.o +END_HEADER +*/ + +#include +#include "testlib.h" +#include "mpscepdl.h" +#include "mpsavm.h" + +#define MAXNUMBER 1000000 + +void *stackpointer; +mps_space_t space; + +static struct {mps_addr_t addr; size_t size;} queue[MAXNUMBER]; + +enum {SEQ=0, RAN=1, SEQGAP=2, RANGAP=3, DUMMY=4}; +static char *tdesc[] = {"sequential", "random", + "sequential gap", "random gap", "dummy"}; + +static void setobj(mps_addr_t a, size_t size, unsigned char val) +{ + unsigned char *b; + b = a; + + while (size>0) + { + *b=val; + /* comment("%p = %i", b, (int) val); + */ + b++; + size--; + } +} + +static int chkobj(mps_addr_t a, size_t size, unsigned char val) +{ + unsigned char *b; + b = a; + + while (size>0) + { + /* comment("%p == %i", b, (int) val); + */ + if (*b != val) return 0; + b++; + size--; + } + return 1; +} + +static void dt(int kind, + size_t extendBy, size_t avgSize, size_t maxSize, + size_t mins, size_t maxs, int number, int iter) +{ + mps_pool_t pool; + int i, hd; + clock_t time0, time1; + size_t size; + int secs; + + asserts(number <= MAXNUMBER, "number too big"); + + time0 = clock(); + asserts(time0 != -1, "processor time not available"); + + die( + mps_pool_create(&pool, space, mps_class_epdl(), + extendBy, avgSize, maxSize), + "create pool"); + + for(hd=0; hd 0) { + lev1 = 0; + mps_epvm_restore(pool1, lev1); + } + if (lev2 > 0) { + lev2 = 0; + mps_epvm_restore(pool2, lev2); + } + } + j = ranint(40); + switch (j) { + case 1: + if (lev1==0) break; + lev1--; + comment("Restore 1: %i", lev1); + while (ranint(2) && (lev1>0)) lev1--; + mps_epvm_restore(pool1, lev1); + break; + case 2: + if (lev2==0) break; + lev2--; + while (ranint(2) && (lev2>0)) lev2--; + comment("Restore 2: %i", lev2); + mps_epvm_restore(pool2, lev2); + break; + case 3: + case 4: + if (lev1 0) { + lev1 = 0; + mps_epvm_restore(pool1, lev1); + } + } + j = ranint(40); + switch (j) { + case 1: + if (lev1==0) break; + lev1--; + comment("Restore to %i", lev1); + while (ranint(2) && (lev1>0)) lev1--; + mps_epvm_restore(pool1, lev1); + break; + case 2: + break; + case 3: + case 4: + if (lev1 0) { + lev1--; + mps_epvm_restore(pool1, lev1); + } + } + j = ranint(40); + switch (j) { + case 1: + if (lev1==0) break; + lev1--; + mps_epvm_restore(pool1, lev1); + comment("Restore to %i", lev1); + while (ranint(2) && (lev1>0)) { + lev1--; + mps_epvm_restore(pool1, lev1); + } + break; + case 2: + break; + case 3: + case 4: + if (lev10)) lev1--; + mps_epvm_restore(pool1, lev1); + break; + case 2: + if (lev2==0) break; + lev2--; + while (ranint(2) && (lev2>0)) lev2--; + comment("Restore 2: %i", lev2); + mps_epvm_restore(pool2, lev2); + break; + case 3: + case 4: + if (lev1