mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-30 05:45:12 +00:00
Merge commit 'ddf105b646
' into sync-from-ra
This commit is contained in:
parent
0816d49d83
commit
e41ab350d6
378 changed files with 14720 additions and 3111 deletions
76
crates/salsa/tests/incremental/memoized_inputs.rs
Normal file
76
crates/salsa/tests/incremental/memoized_inputs.rs
Normal file
|
@ -0,0 +1,76 @@
|
|||
use crate::implementation::{TestContext, TestContextImpl};
|
||||
|
||||
#[salsa::query_group(MemoizedInputs)]
|
||||
pub(crate) trait MemoizedInputsContext: TestContext {
|
||||
fn max(&self) -> usize;
|
||||
#[salsa::input]
|
||||
fn input1(&self) -> usize;
|
||||
#[salsa::input]
|
||||
fn input2(&self) -> usize;
|
||||
}
|
||||
|
||||
fn max(db: &dyn MemoizedInputsContext) -> usize {
|
||||
db.log().add("Max invoked");
|
||||
std::cmp::max(db.input1(), db.input2())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn revalidate() {
|
||||
let db = &mut TestContextImpl::default();
|
||||
|
||||
db.set_input1(0);
|
||||
db.set_input2(0);
|
||||
|
||||
let v = db.max();
|
||||
assert_eq!(v, 0);
|
||||
db.assert_log(&["Max invoked"]);
|
||||
|
||||
let v = db.max();
|
||||
assert_eq!(v, 0);
|
||||
db.assert_log(&[]);
|
||||
|
||||
db.set_input1(44);
|
||||
db.assert_log(&[]);
|
||||
|
||||
let v = db.max();
|
||||
assert_eq!(v, 44);
|
||||
db.assert_log(&["Max invoked"]);
|
||||
|
||||
let v = db.max();
|
||||
assert_eq!(v, 44);
|
||||
db.assert_log(&[]);
|
||||
|
||||
db.set_input1(44);
|
||||
db.assert_log(&[]);
|
||||
db.set_input2(66);
|
||||
db.assert_log(&[]);
|
||||
db.set_input1(64);
|
||||
db.assert_log(&[]);
|
||||
|
||||
let v = db.max();
|
||||
assert_eq!(v, 66);
|
||||
db.assert_log(&["Max invoked"]);
|
||||
|
||||
let v = db.max();
|
||||
assert_eq!(v, 66);
|
||||
db.assert_log(&[]);
|
||||
}
|
||||
|
||||
/// Test that invoking `set` on an input with the same value still
|
||||
/// triggers a new revision.
|
||||
#[test]
|
||||
fn set_after_no_change() {
|
||||
let db = &mut TestContextImpl::default();
|
||||
|
||||
db.set_input2(0);
|
||||
|
||||
db.set_input1(44);
|
||||
let v = db.max();
|
||||
assert_eq!(v, 44);
|
||||
db.assert_log(&["Max invoked"]);
|
||||
|
||||
db.set_input1(44);
|
||||
let v = db.max();
|
||||
assert_eq!(v, 44);
|
||||
db.assert_log(&["Max invoked"]);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue