From 6514ffc5b33962c98fe9ce8f123edca6c57668d8 Mon Sep 17 00:00:00 2001 From: Botahamec Date: Thu, 19 Dec 2024 18:28:43 -0500 Subject: Finish unit testing --- src/collection.rs | 2 +- src/lockable.rs | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- src/poisonable.rs | 12 ++++++++++ 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 OwnedLockable for Vec {} #[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() { @@ -688,6 +721,26 @@ mod tests { unsafe { assert!(std::ptr::addr_eq(lock_ptrs[1], locks[1].raw())) } } + #[test] + fn vec_as_mut() { + let mut locks: Vec> = 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> = 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([]); @@ -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]> = 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)); + } } -- cgit v1.2.3