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! {
|
2018-09-30 14:55:52 +00:00
|
|
|
crate Input1: Map<(), usize>;
|
2018-09-30 14:50:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
salsa::query_definition! {
|
2018-09-30 14:55:52 +00:00
|
|
|
crate Input2: Map<(), usize>;
|
2018-09-30 14:50:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn revalidate() {
|
|
|
|
let query = TestContextImpl::default();
|
|
|
|
|
2018-09-30 14:59:08 +00:00
|
|
|
let v = query.max().read();
|
2018-09-30 14:50:46 +00:00
|
|
|
assert_eq!(v, 0);
|
|
|
|
query.assert_log(&["Max invoked"]);
|
|
|
|
|
2018-09-30 14:59:08 +00:00
|
|
|
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(&[]);
|
|
|
|
|
2018-09-30 14:59:08 +00:00
|
|
|
let v = query.max().read();
|
2018-09-30 14:50:46 +00:00
|
|
|
assert_eq!(v, 44);
|
|
|
|
query.assert_log(&["Max invoked"]);
|
|
|
|
|
2018-09-30 14:59:08 +00:00
|
|
|
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(&[]);
|
|
|
|
|
2018-09-30 14:59:08 +00:00
|
|
|
let v = query.max().read();
|
2018-09-30 14:50:46 +00:00
|
|
|
assert_eq!(v, 66);
|
|
|
|
query.assert_log(&["Max invoked"]);
|
|
|
|
|
2018-09-30 14:59:08 +00:00
|
|
|
let v = query.max().read();
|
2018-09-30 14:50:46 +00:00
|
|
|
assert_eq!(v, 66);
|
|
|
|
query.assert_log(&[]);
|
|
|
|
}
|