WVPASS((retval & MGRET_ERROR_MASK) == 0);
}
-#define MGTEST(timeout_us, mem_budget, flags, code) \
+pthread_mutex_t wvtest_lock = PTHREAD_MUTEX_INITIALIZER;
+
+#define MGTEST(timeout_us, mem_budget, flags, code) \
({ \
long retval; \
retval = memguard(timeout_us, mem_budget, flags); \
code; \
retval = memguard(0, 0, 0); \
+ pthread_mutex_lock(&wvtest_lock); \
print_test_info(timeout_us, mem_budget, flags, retval, #code); \
mgret(retval); \
})
+#define MGTESTEND() pthread_mutex_unlock(&wvtest_lock)
+
void *test_thread(void *ptr)
{
cpu_set_t set;
r = MGTEST(5000, 10000, flags, compute_kernel(1000));
WVPASS(!r.time_ovf);
WVPASS(r.time > 900);
+ MGTESTEND();
r = MGTEST(500, 10000, flags, compute_kernel(1000));
WVPASS(r.time_ovf);
WVPASS(r.time > 900);
+ MGTESTEND();
r = MGTEST(5000, 10000, flags, compute_kernel(2000));
WVPASS(!r.time_ovf);
WVPASS(r.time > 1900);
+ MGTESTEND();
r = MGTEST(500, 10000, flags, compute_kernel(2000));
WVPASS(r.time_ovf);
WVPASS(r.time > 1900);
+ MGTESTEND();
///////////////////////////////////////////////////////
r = MGTEST(100000, 500000, flags, read_memory(100000));
WVPASS(!r.mem_ovf);
WVPASS(r.mem >= 90000);
+ MGTESTEND();
r = MGTEST(100000, 50000, flags, read_memory(100000));
WVPASS(r.mem_ovf);
WVPASS(r.mem >= 90000);
+ MGTESTEND();
r = MGTEST(100000, 500000, flags, read_memory_rnd(100000));
WVPASS(!r.mem_ovf);
WVPASS(r.mem >= 90000);
+ MGTESTEND();
r = MGTEST(100000, 50000, flags, read_memory_rnd(100000));
WVPASS(r.mem_ovf);
WVPASS(r.mem >= 90000);
+ MGTESTEND();
r = MGTEST(100000, 500000, flags, write_memory(100000));
WVPASS(!r.mem_ovf);
WVPASS(r.mem >= 90000);
+ MGTESTEND();
r = MGTEST(100000, 50000, flags, write_memory(100000));
WVPASS(r.mem_ovf);
WVPASS(r.mem >= 90000);
+ MGTESTEND();
///////////////////////////////////////////////////////
r = MGTEST(100000, 5000000, flags, read_memory(1000000));
WVPASS(!r.mem_ovf);
WVPASS(r.mem >= 900000);
+ MGTESTEND();
r = MGTEST(100000, 500000, flags, read_memory(1000000));
WVPASS(r.mem_ovf);
WVPASS(r.mem >= 900000);
+ MGTESTEND();
r = MGTEST(100000, 5000000, flags, read_memory_rnd(1000000));
WVPASS(!r.mem_ovf);
WVPASS(r.mem >= 900000);
+ MGTESTEND();
r = MGTEST(100000, 500000, flags, read_memory_rnd(1000000));
WVPASS(r.mem_ovf);
WVPASS(r.mem >= 900000);
+ MGTESTEND();
r = MGTEST(100000, 5000000, flags, write_memory(1000000));
WVPASS(!r.mem_ovf);
WVPASS(r.mem >= 900000);
+ MGTESTEND();
r = MGTEST(100000, 500000, flags, write_memory(1000000));
WVPASS(r.mem_ovf);
WVPASS(r.mem >= 900000);
+ MGTESTEND();
printf("\n");
}
struct mg_ret r1, r2, r3;
r1 = MGTEST(10000, 9000, MGF_PERIODIC | MGF_MASK_INT, read_memory(100000));
WVPASS(r1.time > 100*1000);
+ MGTESTEND();
+
r2 = MGTEST(10000, 3000, MGF_PERIODIC | MGF_MASK_INT, read_memory(100000));
WVPASS(r2.time > 2 * r1.time);
+ MGTESTEND();
+
r3 = MGTEST(10000, 1000, MGF_PERIODIC | MGF_MASK_INT, read_memory(100000));
WVPASS(r3.time > 2 * r2.time);
+ MGTESTEND();
return NULL;
}