From 966170452f694392df2455437344846956d9a01c Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Tue, 14 Jul 2020 14:43:14 +0200 Subject: [PATCH] Improve test representativity by simulating various speeds for readers and writers --- tests/test-msnapshot.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/tests/test-msnapshot.c b/tests/test-msnapshot.c index 94b670e3..f24ed67c 100644 --- a/tests/test-msnapshot.c +++ b/tests/test-msnapshot.c @@ -215,13 +215,20 @@ snapshot_mrsw_data_t global_mrsw; static void conso2(void *arg) { - assert (arg == NULL); + unsigned int idx = (unsigned) (uintptr_t) arg; while (true) { const data_t *p = snapshot_mrsw_data_read_start(global_mrsw); assert (p != NULL); + unsigned int n = p->n; data_valid_p(p); if (p->n == 0) - return; + break; + if (idx > 0) { + // Simulate slow readers if idx > 0 + m_thread_sleep(idx * 10); + data_valid_p(p); + assert (n == p->n); + } snapshot_mrsw_data_read_end(global_mrsw, p); } } @@ -230,12 +237,21 @@ static void prod2(void *arg) { assert (arg == NULL); data_t *p = snapshot_mrsw_data_get_write_buffer(global_mrsw); - for(unsigned int i = 1; i < 200000;i++) { + for(unsigned int i = 1; i < 190000;i++) { assert (p != NULL); p->n = i * i; data_crc(p); p = snapshot_mrsw_data_write(global_mrsw); } + for(unsigned int i = 190000; i < 200000;i++) { + assert (p != NULL); + p->n = i * i; + data_crc(p); + // Simulate slow writes + m_thread_sleep(1); + m_thread_yield(); + p = snapshot_mrsw_data_write(global_mrsw); + } p->n = 0; data_crc(p); p = snapshot_mrsw_data_write(global_mrsw); @@ -259,7 +275,7 @@ static void test_mrsw_global(int reader) assert (p != NULL); for(int i = 0 ; i < reader; i++) - m_thread_create (idx[i], conso2, NULL); + m_thread_create (idx[i], conso2, (void*) (uintptr_t) i); m_thread_create (idx_w, prod2, NULL); m_thread_join(idx_w);