From 48aaedad542b9c6cbdc85d22517cd0d151f38443 Mon Sep 17 00:00:00 2001 From: Mica White Date: Sun, 1 Dec 2024 15:28:44 -0500 Subject: Unit testing --- src/lockable.rs | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) (limited to 'src/lockable.rs') 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 Sharable for Vec {} unsafe impl OwnedLockable for [T; N] {} unsafe impl OwnedLockable for Box<[T]> {} unsafe impl OwnedLockable for Vec {} + +#[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; 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; 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> = 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> = 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> = 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]> = 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]> = 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())) } + } +} -- cgit v1.2.3