diff --git a/reactive_graph/tests/signal.rs b/reactive_graph/tests/signal.rs index 582178195c..3a49e3321e 100644 --- a/reactive_graph/tests/signal.rs +++ b/reactive_graph/tests/signal.rs @@ -140,3 +140,56 @@ fn into_inner_non_arc_signal() { b.dispose(); assert_eq!(a.into_inner(), Some(2)); } + +#[test] +fn threaded_get_set() { + let owner = Owner::new(); + owner.set(); + + let signal = ArcRwSignal::new(0); + + std::thread::scope(|s| { + for _ in 0..5 { + let signal = signal.clone(); + s.spawn(move || { + for _ in 0..1_000 { + signal.get(); + signal.set(1); + } + }); + } + }); +} + +#[test] +fn read_during_write() { + let owner = Owner::new(); + owner.set(); + + let signal = ArcRwSignal::new(0); + + let guard1 = signal.write(); + let guard2 = signal.read(); + + println!("DONE"); + + drop(guard1); + drop(guard2); +} + +#[test] +#[ignore = "hangs"] +fn overlapping_writes() { + let owner = Owner::new(); + owner.set(); + + let signal = ArcRwSignal::new(0); + + let guard1 = signal.write(); + let guard2 = signal.write(); + + println!("DONE"); + + drop(guard1); + drop(guard2); +}