diff --git a/src/shared/local_shared.rs b/src/shared/local_shared.rs index 6b1f2ff..9af74a9 100644 --- a/src/shared/local_shared.rs +++ b/src/shared/local_shared.rs @@ -55,3 +55,39 @@ impl Clone for LocalUnsafeShared { Self(self.0.clone()) } } + +#[cfg(test)] +mod tests { + use super::*; + use crate::{define_with, define_with_unchecked}; + + #[test] + fn test_local_shared() { + let mut shared = LocalShared::new(5); + define_with!(shared); + + with!(|data| { + *data += 1; + }); + + let mut shared_clone = shared.clone(); + let result = shared_clone.with(|data| *data); + assert_eq!(result, 6); + } + + #[test] + fn test_local_unsafe_shared() { + let mut shared = LocalUnsafeShared::new(10); + define_with_unchecked!(shared); + + unsafe { + with_unchecked!(|data| { + *data += 1; + }) + }; + + let mut shared_clone = shared.clone(); + let result = unsafe { shared_clone.with(|data| *data) }; + assert_eq!(result, 11); + } +} diff --git a/src/shared/projected_shared.rs b/src/shared/projected_shared.rs index 41f128c..2a49253 100644 --- a/src/shared/projected_shared.rs +++ b/src/shared/projected_shared.rs @@ -51,3 +51,22 @@ where self.inner.with(|from| f(proj_fn(from))) } } + +#[cfg(test)] +mod tests { + use super::*; + use crate::shared::LocalShared; + + #[test] + fn test_projected_shared() { + let mut shared = LocalShared::new((1, 2)); + let mut projected = shared.project(|data| &mut data.0); + + projected.with(|data| { + *data += 10; + }); + + let result = shared.with(|data| data.0); + assert_eq!(result, 11); + } +}