test: add tests for the uv_rwlock implementation

PR-URL: https://github.com/libuv/libuv/pull/525
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
This commit is contained in:
Bert Belder 2015-09-13 16:58:40 +02:00
parent 9c307cc630
commit 1ad6ad7ada
2 changed files with 61 additions and 0 deletions

View File

@ -291,6 +291,7 @@ TEST_DECLARE (threadpool_cancel_single)
TEST_DECLARE (thread_local_storage) TEST_DECLARE (thread_local_storage)
TEST_DECLARE (thread_mutex) TEST_DECLARE (thread_mutex)
TEST_DECLARE (thread_rwlock) TEST_DECLARE (thread_rwlock)
TEST_DECLARE (thread_rwlock_trylock)
TEST_DECLARE (thread_create) TEST_DECLARE (thread_create)
TEST_DECLARE (thread_equal) TEST_DECLARE (thread_equal)
TEST_DECLARE (dlerror) TEST_DECLARE (dlerror)
@ -707,6 +708,7 @@ TASK_LIST_START
TEST_ENTRY (thread_local_storage) TEST_ENTRY (thread_local_storage)
TEST_ENTRY (thread_mutex) TEST_ENTRY (thread_mutex)
TEST_ENTRY (thread_rwlock) TEST_ENTRY (thread_rwlock)
TEST_ENTRY (thread_rwlock_trylock)
TEST_ENTRY (thread_create) TEST_ENTRY (thread_create)
TEST_ENTRY (thread_equal) TEST_ENTRY (thread_equal)
TEST_ENTRY (dlerror) TEST_ENTRY (dlerror)

View File

@ -61,3 +61,62 @@ TEST_IMPL(thread_rwlock) {
return 0; 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;
}