Skip to content

Commit

Permalink
test: add tests for the uv_rwlock implementation
Browse files Browse the repository at this point in the history
PR-URL: libuv#525
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
  • Loading branch information
piscisaureus committed Sep 22, 2015
1 parent 9c307cc commit 1ad6ad7
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 0 deletions.
2 changes: 2 additions & 0 deletions test/test-list.h
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
59 changes: 59 additions & 0 deletions test/test-mutexes.c
Expand Up @@ -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;
}

0 comments on commit 1ad6ad7

Please sign in to comment.