summaryrefslogtreecommitdiff
path: root/src/rwlock.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/rwlock.rs')
-rw-r--r--src/rwlock.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/rwlock.rs b/src/rwlock.rs
index ea7d3f0..f78e648 100644
--- a/src/rwlock.rs
+++ b/src/rwlock.rs
@@ -117,6 +117,7 @@ pub struct RwLockWriteGuard<'a, 'key: 'a, T: ?Sized, Key: Keyable + 'key, R: Raw
#[cfg(test)]
mod tests {
use crate::lockable::Lockable;
+ use crate::LockCollection;
use crate::RwLock;
use crate::ThreadKey;
@@ -234,6 +235,21 @@ mod tests {
}
#[test]
+ fn write_ord() {
+ let key = ThreadKey::get().unwrap();
+ let lock1: crate::RwLock<_> = RwLock::new(1);
+ let lock2: crate::RwLock<_> = RwLock::new(5);
+ let lock3: crate::RwLock<_> = RwLock::new(5);
+ let collection = LockCollection::try_new((&lock1, &lock2, &lock3)).unwrap();
+ let guard = collection.lock(key);
+
+ assert!(guard.0 < guard.1);
+ assert!(guard.1 > guard.0);
+ assert!(guard.1 == guard.2);
+ assert!(guard.0 != guard.2);
+ }
+
+ #[test]
fn read_ref_display_works() {
let lock: crate::RwLock<_> = RwLock::new("Hello, world!");
let guard = unsafe { lock.try_read_no_key().unwrap() };
@@ -248,6 +264,21 @@ mod tests {
}
#[test]
+ fn read_ord() {
+ let key = ThreadKey::get().unwrap();
+ let lock1: crate::RwLock<_> = RwLock::new(1);
+ let lock2: crate::RwLock<_> = RwLock::new(5);
+ let lock3: crate::RwLock<_> = RwLock::new(5);
+ let collection = LockCollection::try_new((&lock1, &lock2, &lock3)).unwrap();
+ let guard = collection.read(key);
+
+ assert!(guard.0 < guard.1);
+ assert!(guard.1 > guard.0);
+ assert!(guard.1 == guard.2);
+ assert!(guard.0 != guard.2);
+ }
+
+ #[test]
fn dropping_read_ref_releases_rwlock() {
let lock: crate::RwLock<_> = RwLock::new("Hello, world!");