From 1ad6ad7ada4a01749cecdf82c56ccdc98a499262 Mon Sep 17 00:00:00 2001 From: Bert Belder Date: Sun, 13 Sep 2015 16:58:40 +0200 Subject: [PATCH] test: add tests for the uv_rwlock implementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/libuv/libuv/pull/525 Reviewed-By: Saúl Ibarra Corretgé --- test/test-list.h | 2 ++ test/test-mutexes.c | 59 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/test/test-list.h b/test/test-list.h index 31899664f50..8ee74391afa 100644 --- a/test/test-list.h +++ b/test/test-list.h @@ -291,6 +291,7 @@ TEST_DECLARE (threadpool_cancel_single) TEST_DECLARE (thread_local_storage) TEST_DECLARE (thread_mutex) TEST_DECLARE (thread_rwlock) +TEST_DECLARE (thread_rwlock_trylock) TEST_DECLARE (thread_create) TEST_DECLARE (thread_equal) TEST_DECLARE (dlerror) @@ -707,6 +708,7 @@ TASK_LIST_START TEST_ENTRY (thread_local_storage) TEST_ENTRY (thread_mutex) TEST_ENTRY (thread_rwlock) + TEST_ENTRY (thread_rwlock_trylock) TEST_ENTRY (thread_create) TEST_ENTRY (thread_equal) TEST_ENTRY (dlerror) diff --git a/test/test-mutexes.c b/test/test-mutexes.c index 896f46bbed0..4aeac73b4c1 100644 --- a/test/test-mutexes.c +++ b/test/test-mutexes.c @@ -61,3 +61,62 @@ TEST_IMPL(thread_rwlock) { return 0; } + + +TEST_IMPL(thread_rwlock_trylock) { + uv_rwlock_t rwlock; + int r; + + r = uv_rwlock_init(&rwlock); + ASSERT(r == 0); + + /* No locks held. */ + + r = uv_rwlock_trywrlock(&rwlock); + ASSERT(r == 0); + + /* Write lock held. */ + + r = uv_rwlock_tryrdlock(&rwlock); + ASSERT(r == UV_EBUSY); + r = uv_rwlock_trywrlock(&rwlock); + ASSERT(r == UV_EBUSY); + + uv_rwlock_wrunlock(&rwlock); + + /* No locks held. */ + + r = uv_rwlock_tryrdlock(&rwlock); + ASSERT(r == 0); + + /* One read lock held. */ + + r = uv_rwlock_tryrdlock(&rwlock); + ASSERT(r == 0); + + /* Two read locks held. */ + + r = uv_rwlock_trywrlock(&rwlock); + ASSERT(r == UV_EBUSY); + + uv_rwlock_rdunlock(&rwlock); + + /* One read lock held. */ + + uv_rwlock_rdunlock(&rwlock); + + /* No read locks held. */ + + r = uv_rwlock_trywrlock(&rwlock); + ASSERT(r == 0); + + /* Write lock held. */ + + uv_rwlock_wrunlock(&rwlock); + + /* No locks held. */ + + uv_rwlock_destroy(&rwlock); + + return 0; +}