summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBotahamec <botahamec@outlook.com>2024-12-19 18:28:43 -0500
committerBotahamec <botahamec@outlook.com>2024-12-19 18:28:43 -0500
commit6514ffc5b33962c98fe9ce8f123edca6c57668d8 (patch)
tree69aec845b1bb064142bddea94dfce87de62a56b9
parent48aaedad542b9c6cbdc85d22517cd0d151f38443 (diff)
Finish unit testing
-rw-r--r--src/collection.rs2
-rw-r--r--src/lockable.rs65
-rw-r--r--src/poisonable.rs12
3 files changed, 77 insertions, 2 deletions
diff --git a/src/collection.rs b/src/collection.rs
index c1c7697..9e88062 100644
--- a/src/collection.rs
+++ b/src/collection.rs
@@ -1,5 +1,5 @@
use std::cell::UnsafeCell;
-use std::marker::PhantomData;
+use std::marker::{PhantomData, PhantomPinned};
use crate::{key::Keyable, lockable::RawLock};
diff --git a/src/lockable.rs b/src/lockable.rs
index 8742b96..a2248bc 100644
--- a/src/lockable.rs
+++ b/src/lockable.rs
@@ -626,7 +626,40 @@ unsafe impl<T: OwnedLockable> OwnedLockable for Vec<T> {}
#[cfg(test)]
mod tests {
use super::*;
- use crate::Mutex;
+ use crate::{Mutex, RwLock};
+
+ #[test]
+ fn mut_ref_get_ptrs() {
+ let mut rwlock = RwLock::new(5);
+ let mutref = &mut rwlock;
+ let mut lock_ptrs = Vec::new();
+ mutref.get_ptrs(&mut lock_ptrs);
+
+ assert_eq!(lock_ptrs.len(), 1);
+ assert!(std::ptr::addr_eq(lock_ptrs[0], mutref));
+ }
+
+ #[test]
+ fn read_lock_get_ptrs() {
+ let rwlock = RwLock::new(5);
+ let readlock = ReadLock::new(&rwlock);
+ let mut lock_ptrs = Vec::new();
+ readlock.get_ptrs(&mut lock_ptrs);
+
+ assert_eq!(lock_ptrs.len(), 1);
+ assert!(std::ptr::addr_eq(lock_ptrs[0], &rwlock));
+ }
+
+ #[test]
+ fn write_lock_get_ptrs() {
+ let rwlock = RwLock::new(5);
+ let writelock = WriteLock::new(&rwlock);
+ let mut lock_ptrs = Vec::new();
+ writelock.get_ptrs(&mut lock_ptrs);
+
+ assert_eq!(lock_ptrs.len(), 1);
+ assert!(std::ptr::addr_eq(lock_ptrs[0], &rwlock));
+ }
#[test]
fn array_get_ptrs_empty() {
@@ -689,6 +722,26 @@ mod tests {
}
#[test]
+ fn vec_as_mut() {
+ let mut locks: Vec<Mutex<i32>> = vec![Mutex::new(1), Mutex::new(2)];
+ let lock_ptrs = LockableAsMut::as_mut(&mut locks);
+
+ assert_eq!(lock_ptrs.len(), 2);
+ assert_eq!(*lock_ptrs[0], 1);
+ assert_eq!(*lock_ptrs[1], 2);
+ }
+
+ #[test]
+ fn vec_into_inner() {
+ let locks: Vec<Mutex<i32>> = vec![Mutex::new(1), Mutex::new(2)];
+ let lock_ptrs = LockableIntoInner::into_inner(locks);
+
+ assert_eq!(lock_ptrs.len(), 2);
+ assert_eq!(lock_ptrs[0], 1);
+ assert_eq!(lock_ptrs[1], 2);
+ }
+
+ #[test]
fn box_get_ptrs_empty() {
let locks: Box<[Mutex<()>]> = Box::from([]);
let mut lock_ptrs = Vec::new();
@@ -717,4 +770,14 @@ mod tests {
unsafe { assert!(std::ptr::addr_eq(lock_ptrs[0], locks[0].raw())) }
unsafe { assert!(std::ptr::addr_eq(lock_ptrs[1], locks[1].raw())) }
}
+
+ #[test]
+ fn box_as_mut() {
+ let mut locks: Box<[Mutex<i32>]> = vec![Mutex::new(1), Mutex::new(2)].into_boxed_slice();
+ let lock_ptrs = LockableAsMut::as_mut(&mut locks);
+
+ assert_eq!(lock_ptrs.len(), 2);
+ assert_eq!(*lock_ptrs[0], 1);
+ assert_eq!(*lock_ptrs[1], 2);
+ }
}
diff --git a/src/poisonable.rs b/src/poisonable.rs
index d664291..ec6de82 100644
--- a/src/poisonable.rs
+++ b/src/poisonable.rs
@@ -94,6 +94,7 @@ pub type TryLockPoisonableResult<'flag, 'key, G, Key> =
#[cfg(test)]
mod tests {
use super::*;
+ use crate::lockable::Lockable;
use crate::{Mutex, ThreadKey};
#[test]
@@ -105,4 +106,15 @@ mod tests {
assert_eq!(guard.to_string(), "Hello, world!");
}
+
+ #[test]
+ fn get_ptrs() {
+ let mutex = Mutex::new(5);
+ let poisonable = Poisonable::new(mutex);
+ let mut lock_ptrs = Vec::new();
+ poisonable.get_ptrs(&mut lock_ptrs);
+
+ assert_eq!(lock_ptrs.len(), 1);
+ assert!(std::ptr::addr_eq(lock_ptrs[0], &poisonable.inner));
+ }
}