salsa/tests/incremental/memoized_inputs.rs

67 lines
1.4 KiB
Rust
Raw Normal View History

2018-09-30 14:50:46 +00:00
use crate::implementation::{TestContext, TestContextImpl};
crate trait MemoizedInputsContext: TestContext {
salsa::query_prototype! {
fn max() for Max;
fn input1() for Input1;
fn input2() for Input2;
}
}
salsa::query_definition! {
crate Max(query: &impl MemoizedInputsContext, (): ()) -> usize {
query.log().add("Max invoked");
std::cmp::max(
query.input1().read(),
query.input2().read(),
)
}
}
salsa::query_definition! {
crate Input1: Map<(), usize>;
2018-09-30 14:50:46 +00:00
}
salsa::query_definition! {
crate Input2: Map<(), usize>;
2018-09-30 14:50:46 +00:00
}
#[test]
fn revalidate() {
let query = TestContextImpl::default();
let v = query.max().read();
2018-09-30 14:50:46 +00:00
assert_eq!(v, 0);
query.assert_log(&["Max invoked"]);
let v = query.max().read();
2018-09-30 14:50:46 +00:00
assert_eq!(v, 0);
query.assert_log(&[]);
query.input1().set((), 44);
query.assert_log(&[]);
let v = query.max().read();
2018-09-30 14:50:46 +00:00
assert_eq!(v, 44);
query.assert_log(&["Max invoked"]);
let v = query.max().read();
2018-09-30 14:50:46 +00:00
assert_eq!(v, 44);
query.assert_log(&[]);
query.input1().set((), 44);
query.assert_log(&[]);
query.input2().set((), 66);
query.assert_log(&[]);
query.input1().set((), 64);
query.assert_log(&[]);
let v = query.max().read();
2018-09-30 14:50:46 +00:00
assert_eq!(v, 66);
query.assert_log(&["Max invoked"]);
let v = query.max().read();
2018-09-30 14:50:46 +00:00
assert_eq!(v, 66);
query.assert_log(&[]);
}