summaryrefslogtreecommitdiffstats
path: root/vendor/rust-analyzer-salsa/tests/transparent.rs
blob: ca922c579731042683694b2d4475b55d9c6cff56 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//! Test that transparent (uncached) queries work

#[salsa::query_group(QueryGroupStorage)]
trait QueryGroup {
    #[salsa::input]
    fn input(&self, x: u32) -> u32;
    #[salsa::transparent]
    fn wrap(&self, x: u32) -> u32;
    fn get(&self, x: u32) -> u32;
}

fn wrap(db: &dyn QueryGroup, x: u32) -> u32 {
    db.input(x)
}

fn get(db: &dyn QueryGroup, x: u32) -> u32 {
    db.wrap(x)
}

#[salsa::database(QueryGroupStorage)]
#[derive(Default)]
struct Database {
    storage: salsa::Storage<Self>,
}

impl salsa::Database for Database {}

#[test]
fn transparent_queries_work() {
    let mut db = Database::default();

    db.set_input(1, 10);
    assert_eq!(db.get(1), 10);
    assert_eq!(db.get(1), 10);

    db.set_input(1, 92);
    assert_eq!(db.get(1), 92);
    assert_eq!(db.get(1), 92);
}