Something went wrong. Try again.
concurrent, realtime write data structure.
Something went wrong. Try again.
2.1 kB · 79 lines
Rust
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980#[cfg(test)]mod usage_test { use rt_write_lock::Reader;
#[test] fn create_two_times() { let mut reader: Reader<u32> = Reader::default(); let writer = reader.get_writer().unwrap(); assert!(reader.get_writer().is_none()); drop(writer); reader.get_writer().unwrap(); }
#[test] fn single_thread() { let mut reader: Reader<u32> = Reader::default(); let mut writer = reader.get_writer().unwrap();
let mut write = writer.write(); assert!(reader.get_writer().is_none()); let read = reader.try_read().unwrap(); assert!(*read == 0); assert!(*write == 0);
*write = 2; assert!(*read == 0); assert!(*write == 2); drop(write);
let write = writer.write(); assert!(*read == 0); assert!(*write == 2); drop(read);
assert!(reader.try_read().is_none()); }
#[test] fn drop_reader_first() { let mut reader: Reader<u32> = Reader::default(); let writer = reader.get_writer().unwrap();
// drop order opposite of normal drop(reader); drop(writer); }
#[test] #[should_panic] fn double_write() { let mut reader: Reader<u32> = Reader::default(); let mut writer = reader.get_writer().unwrap();
let write = writer.write(); core::mem::forget(write); writer.write(); }
#[test] fn threads() { let mut reader: Reader<u32> = Reader::default(); let mut writer = reader.get_writer().unwrap();
std::thread::scope(|s| { let read = reader.try_read().unwrap(); assert!(*read == 0); s.spawn(move || { let mut write = writer.write(); *write = 15; }); assert!(*read == 0); drop(read); let read = reader.try_read().unwrap(); assert!(*read == 0 || *read == 15); }); let read = reader.try_read().unwrap(); assert!(*read == 15); }}