make query method get by default

Use `Query.set(db, key, value)` to set. Not sure about this.
This commit is contained in:
Niko Matsakis 2018-10-05 05:28:51 -04:00
parent d6c7080877
commit cd5622c6de
10 changed files with 162 additions and 98 deletions

View file

@ -1,10 +1,17 @@
use crate::implementation::{TestContext, TestContextImpl};
use salsa::Query;
salsa::query_prototype! {
crate trait MemoizedInputsContext: TestContext {
fn max() for Max;
fn input1() for Input1;
fn input2() for Input2;
fn max(key: ()) -> usize {
type Max;
}
fn input1(key: ()) -> usize {
type Input1;
}
fn input2(key: ()) -> usize {
type Input2;
}
}
}
@ -12,8 +19,8 @@ salsa::query_definition! {
crate Max(db: &impl MemoizedInputsContext, (): ()) -> usize {
db.log().add("Max invoked");
std::cmp::max(
db.input1().read(),
db.input2().read(),
db.input1(()),
db.input2(()),
)
}
}
@ -28,39 +35,39 @@ salsa::query_definition! {
#[test]
fn revalidate() {
let query = TestContextImpl::default();
let db = &TestContextImpl::default();
let v = query.max().read();
let v = db.max(());
assert_eq!(v, 0);
query.assert_log(&["Max invoked"]);
db.assert_log(&["Max invoked"]);
let v = query.max().read();
let v = db.max(());
assert_eq!(v, 0);
query.assert_log(&[]);
db.assert_log(&[]);
query.input1().set((), 44);
query.assert_log(&[]);
Input1.set(db, (), 44);
db.assert_log(&[]);
let v = query.max().read();
let v = db.max(());
assert_eq!(v, 44);
query.assert_log(&["Max invoked"]);
db.assert_log(&["Max invoked"]);
let v = query.max().read();
let v = db.max(());
assert_eq!(v, 44);
query.assert_log(&[]);
db.assert_log(&[]);
query.input1().set((), 44);
query.assert_log(&[]);
query.input2().set((), 66);
query.assert_log(&[]);
query.input1().set((), 64);
query.assert_log(&[]);
Input1.set(db, (), 44);
db.assert_log(&[]);
Input2.set(db, (), 66);
db.assert_log(&[]);
Input1.set(db, (), 64);
db.assert_log(&[]);
let v = query.max().read();
let v = db.max(());
assert_eq!(v, 66);
query.assert_log(&["Max invoked"]);
db.assert_log(&["Max invoked"]);
let v = query.max().read();
let v = db.max(());
assert_eq!(v, 66);
query.assert_log(&[]);
db.assert_log(&[]);
}