diff options
| author | Mica White <botahamec@gmail.com> | 2024-12-01 15:28:44 -0500 |
|---|---|---|
| committer | Mica White <botahamec@gmail.com> | 2024-12-01 15:29:19 -0500 |
| commit | 48aaedad542b9c6cbdc85d22517cd0d151f38443 (patch) | |
| tree | b5b197c47476e88b9926852c73a84f24b6497c77 /src/lockable.rs | |
| parent | 0140f58043a2a00312d31907253cc718985e1e6c (diff) | |
Unit testing
Diffstat (limited to 'src/lockable.rs')
| -rw-r--r-- | src/lockable.rs | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/lockable.rs b/src/lockable.rs index 6d8e7b4..8742b96 100644 --- a/src/lockable.rs +++ b/src/lockable.rs @@ -622,3 +622,99 @@ unsafe impl<T: Sharable> Sharable for Vec<T> {} unsafe impl<T: OwnedLockable, const N: usize> OwnedLockable for [T; N] {} unsafe impl<T: OwnedLockable> OwnedLockable for Box<[T]> {} unsafe impl<T: OwnedLockable> OwnedLockable for Vec<T> {} + +#[cfg(test)] +mod tests { + use super::*; + use crate::Mutex; + + #[test] + fn array_get_ptrs_empty() { + let locks: [Mutex<()>; 0] = []; + let mut lock_ptrs = Vec::new(); + locks.get_ptrs(&mut lock_ptrs); + + assert!(lock_ptrs.is_empty()); + } + + #[test] + fn array_get_ptrs_length_one() { + let locks: [Mutex<i32>; 1] = [Mutex::new(1)]; + let mut lock_ptrs = Vec::new(); + locks.get_ptrs(&mut lock_ptrs); + + assert_eq!(lock_ptrs.len(), 1); + unsafe { assert!(std::ptr::addr_eq(lock_ptrs[0], locks[0].raw())) } + } + + #[test] + fn array_get_ptrs_length_two() { + let locks: [Mutex<i32>; 2] = [Mutex::new(1), Mutex::new(2)]; + let mut lock_ptrs = Vec::new(); + locks.get_ptrs(&mut lock_ptrs); + + assert_eq!(lock_ptrs.len(), 2); + 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 vec_get_ptrs_empty() { + let locks: Vec<Mutex<()>> = Vec::new(); + let mut lock_ptrs = Vec::new(); + locks.get_ptrs(&mut lock_ptrs); + + assert!(lock_ptrs.is_empty()); + } + + #[test] + fn vec_get_ptrs_length_one() { + let locks: Vec<Mutex<i32>> = vec![Mutex::new(1)]; + let mut lock_ptrs = Vec::new(); + locks.get_ptrs(&mut lock_ptrs); + + assert_eq!(lock_ptrs.len(), 1); + unsafe { assert!(std::ptr::addr_eq(lock_ptrs[0], locks[0].raw())) } + } + + #[test] + fn vec_get_ptrs_length_two() { + let locks: Vec<Mutex<i32>> = vec![Mutex::new(1), Mutex::new(2)]; + let mut lock_ptrs = Vec::new(); + locks.get_ptrs(&mut lock_ptrs); + + assert_eq!(lock_ptrs.len(), 2); + 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_get_ptrs_empty() { + let locks: Box<[Mutex<()>]> = Box::from([]); + let mut lock_ptrs = Vec::new(); + locks.get_ptrs(&mut lock_ptrs); + + assert!(lock_ptrs.is_empty()); + } + + #[test] + fn box_get_ptrs_length_one() { + let locks: Box<[Mutex<i32>]> = vec![Mutex::new(1)].into_boxed_slice(); + let mut lock_ptrs = Vec::new(); + locks.get_ptrs(&mut lock_ptrs); + + assert_eq!(lock_ptrs.len(), 1); + unsafe { assert!(std::ptr::addr_eq(lock_ptrs[0], locks[0].raw())) } + } + + #[test] + fn box_get_ptrs_length_two() { + let locks: Box<[Mutex<i32>]> = vec![Mutex::new(1), Mutex::new(2)].into_boxed_slice(); + let mut lock_ptrs = Vec::new(); + locks.get_ptrs(&mut lock_ptrs); + + assert_eq!(lock_ptrs.len(), 2); + unsafe { assert!(std::ptr::addr_eq(lock_ptrs[0], locks[0].raw())) } + unsafe { assert!(std::ptr::addr_eq(lock_ptrs[1], locks[1].raw())) } + } +} |
