mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-03 15:15:24 +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
90
crates/salsa/tests/interned.rs
Normal file
90
crates/salsa/tests/interned.rs
Normal file
|
@ -0,0 +1,90 @@
|
|||
//! Test that you can implement a query using a `dyn Trait` setup.
|
||||
|
||||
use salsa::InternId;
|
||||
|
||||
#[salsa::database(InternStorage)]
|
||||
#[derive(Default)]
|
||||
struct Database {
|
||||
storage: salsa::Storage<Self>,
|
||||
}
|
||||
|
||||
impl salsa::Database for Database {}
|
||||
|
||||
impl salsa::ParallelDatabase for Database {
|
||||
fn snapshot(&self) -> salsa::Snapshot<Self> {
|
||||
salsa::Snapshot::new(Database { storage: self.storage.snapshot() })
|
||||
}
|
||||
}
|
||||
|
||||
#[salsa::query_group(InternStorage)]
|
||||
trait Intern {
|
||||
#[salsa::interned]
|
||||
fn intern1(&self, x: String) -> InternId;
|
||||
|
||||
#[salsa::interned]
|
||||
fn intern2(&self, x: String, y: String) -> InternId;
|
||||
|
||||
#[salsa::interned]
|
||||
fn intern_key(&self, x: String) -> InternKey;
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
|
||||
pub struct InternKey(InternId);
|
||||
|
||||
impl salsa::InternKey for InternKey {
|
||||
fn from_intern_id(v: InternId) -> Self {
|
||||
InternKey(v)
|
||||
}
|
||||
|
||||
fn as_intern_id(&self) -> InternId {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_intern1() {
|
||||
let db = Database::default();
|
||||
let foo0 = db.intern1("foo".to_owned());
|
||||
let bar0 = db.intern1("bar".to_owned());
|
||||
let foo1 = db.intern1("foo".to_owned());
|
||||
let bar1 = db.intern1("bar".to_owned());
|
||||
|
||||
assert_eq!(foo0, foo1);
|
||||
assert_eq!(bar0, bar1);
|
||||
assert_ne!(foo0, bar0);
|
||||
|
||||
assert_eq!("foo".to_owned(), db.lookup_intern1(foo0));
|
||||
assert_eq!("bar".to_owned(), db.lookup_intern1(bar0));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_intern2() {
|
||||
let db = Database::default();
|
||||
let foo0 = db.intern2("x".to_owned(), "foo".to_owned());
|
||||
let bar0 = db.intern2("x".to_owned(), "bar".to_owned());
|
||||
let foo1 = db.intern2("x".to_owned(), "foo".to_owned());
|
||||
let bar1 = db.intern2("x".to_owned(), "bar".to_owned());
|
||||
|
||||
assert_eq!(foo0, foo1);
|
||||
assert_eq!(bar0, bar1);
|
||||
assert_ne!(foo0, bar0);
|
||||
|
||||
assert_eq!(("x".to_owned(), "foo".to_owned()), db.lookup_intern2(foo0));
|
||||
assert_eq!(("x".to_owned(), "bar".to_owned()), db.lookup_intern2(bar0));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_intern_key() {
|
||||
let db = Database::default();
|
||||
let foo0 = db.intern_key("foo".to_owned());
|
||||
let bar0 = db.intern_key("bar".to_owned());
|
||||
let foo1 = db.intern_key("foo".to_owned());
|
||||
let bar1 = db.intern_key("bar".to_owned());
|
||||
|
||||
assert_eq!(foo0, foo1);
|
||||
assert_eq!(bar0, bar1);
|
||||
assert_ne!(foo0, bar0);
|
||||
|
||||
assert_eq!("foo".to_owned(), db.lookup_intern_key(foo0));
|
||||
assert_eq!("bar".to_owned(), db.lookup_intern_key(bar0));
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue