Improve tests & fix bugs.

Still one bug remain.
This commit is contained in:
Patrick Pelissier committed 2018-02-18 17:01:41 +01:00
1 parent 35a3f7c02a
commit b32b93340c
2 files changed
+90 -14

No files matched your search

+59 -2
View File
@@ -255,8 +255,8 @@ static void test_mrsw_global(int reader)
assert (p != NULL);
for(int i = 0 ; i < reader; i++)
m_thread_create (idx[i], conso, NULL);
m_thread_create (idx_w, prod, NULL);
m_thread_create (idx[i], conso2, NULL);
m_thread_create (idx_w, prod2, NULL);
m_thread_join(idx_w);
for(int i = 0 ; i < reader; i++)
@@ -265,6 +265,62 @@ static void test_mrsw_global(int reader)
snapshot_mrsw_data_clear(global_mrsw);
}
snapshot_mrmw_data_t global_mrmw;
static void conso3(void *arg)
{
assert (arg == NULL);
while (true) {
const data_t *p = snapshot_mrmw_data_read_start(global_mrmw);
assert (p != NULL);
data_valid_p(p);
if (p->n == 0)
return;
snapshot_mrmw_data_read_end(global_mrmw, p);
}
}
static void prod3(void *arg)
{
assert (arg == NULL);
for(unsigned int i = 1; i < 20000000;i++) {
data_t *p = snapshot_mrmw_data_write_start(global_mrmw);
assert (p != NULL);
p->n = i * i;
data_crc(p);
snapshot_mrmw_data_write_end(global_mrmw, p);
}
data_t *p = snapshot_mrmw_data_write_start(global_mrmw);
p->n = 0;
data_crc(p);
snapshot_mrmw_data_write_end(global_mrmw, p);
}
static void test_mrmw_global(int reader, int writer)
{
m_thread_t idx_w[writer];
m_thread_t idx[reader];
snapshot_mrmw_data_init(global_mrmw, reader, writer);
data_t *p = snapshot_mrmw_data_write_start(global_mrmw);
assert (p != NULL);
p->n = 42;
data_crc(p);
snapshot_mrmw_data_write_end(global_mrmw, p);
for(int i = 0 ; i < reader; i++)
m_thread_create (idx[i], conso3, NULL);
for(int i = 0 ; i < writer; i++)
m_thread_create (idx_w[i], prod3, NULL);
for(int i = 0 ; i < writer; i++)
m_thread_join(idx_w[i]);
for(int i = 0 ; i < reader; i++)
m_thread_join(idx[i]);
snapshot_mrmw_data_clear(global_mrmw);
}
int main(void)
{
test_uint();
@@ -274,6 +330,7 @@ int main(void)
test_mrsw_global(1);
test_mrsw_global(2);
test_mrsw_global(4);
test_mrsw_global(8);
exit(0);
}