1#[cfg(all(feature = "native", not(feature = "async-tokio")))]
8pub use std::sync::RwLock;
9
10#[cfg(all(feature = "wasm", not(feature = "async-tokio")))]
11pub use std::sync::RwLock;
12
13#[cfg(feature = "async-tokio")]
14pub use tokio::sync::RwLock;
15
16#[cfg(test)]
17mod tests {
18 use super::RwLock;
19
20 #[test]
21 fn test_rwlock_read() {
22 let rw = RwLock::new(42);
23 let read = rw.read().unwrap();
24 assert_eq!(*read, 42);
25 }
26
27 #[test]
28 fn test_rwlock_write() {
29 let rw = RwLock::new(vec![1, 2]);
30 {
31 let mut write = rw.write().unwrap();
32 write.push(3);
33 }
34 let read = rw.read().unwrap();
35 assert_eq!(*read, vec![1, 2, 3]);
36 }
37
38 #[test]
39 fn test_rwlock_multiple_readers() {
40 let rw = std::sync::Arc::new(RwLock::new("hello"));
41 let r1 = rw.read().unwrap();
42 let r2 = rw.read().unwrap();
43 assert_eq!(*r1, "hello");
44 assert_eq!(*r2, "hello");
45 drop(r1);
46 drop(r2);
47 }
48}