mirror of
https://github.com/danbulant/cushy
synced 2026-07-07 04:00:45 +00:00
Added async value test
This commit is contained in:
parent
fbf6134a0a
commit
d766d906a6
3 changed files with 59 additions and 0 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
|
@ -638,6 +638,7 @@ dependencies = [
|
||||||
"interner",
|
"interner",
|
||||||
"kempt",
|
"kempt",
|
||||||
"kludgine",
|
"kludgine",
|
||||||
|
"pollster",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
||||||
|
|
@ -25,3 +25,6 @@ kempt = "0.2.1"
|
||||||
|
|
||||||
[profile.dev.package."*"]
|
[profile.dev.package."*"]
|
||||||
opt-level = 2
|
opt-level = 2
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
pollster = "0.3.0"
|
||||||
|
|
|
||||||
55
src/value.rs
55
src/value.rs
|
|
@ -435,6 +435,61 @@ fn disconnecting_reader_from_dynamic() {
|
||||||
assert!(!ref_reader.block_until_updated());
|
assert!(!ref_reader.block_until_updated());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn disconnecting_reader_threaded() {
|
||||||
|
let a = Dynamic::new(1);
|
||||||
|
let mut a_reader = a.create_reader();
|
||||||
|
let b = Dynamic::new(1);
|
||||||
|
let mut b_reader = b.create_reader();
|
||||||
|
|
||||||
|
let thread = std::thread::spawn(move || {
|
||||||
|
b.set(2);
|
||||||
|
|
||||||
|
assert!(a_reader.block_until_updated());
|
||||||
|
assert_eq!(a_reader.get(), 2);
|
||||||
|
assert!(!a_reader.block_until_updated());
|
||||||
|
});
|
||||||
|
|
||||||
|
// Wait for the thread to set b to 2.
|
||||||
|
assert!(b_reader.block_until_updated());
|
||||||
|
assert_eq!(b_reader.get(), 2);
|
||||||
|
|
||||||
|
// Set a to 2 and drop the handle.
|
||||||
|
a.set(2);
|
||||||
|
drop(a);
|
||||||
|
|
||||||
|
thread.join().unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn disconnecting_reader_async() {
|
||||||
|
let a = Dynamic::new(1);
|
||||||
|
let mut a_reader = a.create_reader();
|
||||||
|
let b = Dynamic::new(1);
|
||||||
|
let mut b_reader = b.create_reader();
|
||||||
|
|
||||||
|
let async_thread = std::thread::spawn(move || {
|
||||||
|
pollster::block_on(async move {
|
||||||
|
// Set b to 2, allowing the thread to execute its code.
|
||||||
|
b.set(2);
|
||||||
|
|
||||||
|
assert!(a_reader.wait_until_updated().await);
|
||||||
|
assert_eq!(a_reader.get(), 2);
|
||||||
|
assert!(!a_reader.wait_until_updated().await);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Wait for the pollster thread to set b to 2.
|
||||||
|
assert!(b_reader.block_until_updated());
|
||||||
|
assert_eq!(b_reader.get(), 2);
|
||||||
|
|
||||||
|
// Set a to 2 and drop the handle.
|
||||||
|
a.set(2);
|
||||||
|
drop(a);
|
||||||
|
|
||||||
|
async_thread.join().unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
/// A tag that represents an individual revision of a [`Dynamic`] value.
|
/// A tag that represents an individual revision of a [`Dynamic`] value.
|
||||||
#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)]
|
#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)]
|
||||||
pub struct Generation(usize);
|
pub struct Generation(usize);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue