| use query_group_macro::query_group; |
| |
| use expect_test::expect; |
| use salsa::plumbing::AsId; |
| |
| mod logger_db; |
| use logger_db::LoggerDb; |
| |
| #[salsa_macros::interned(no_lifetime)] |
| pub struct InternedString { |
| data: String, |
| } |
| |
| #[query_group] |
| pub trait InternedDB: salsa::Database { |
| #[salsa::interned] |
| fn intern_string(&self, data: String) -> InternedString; |
| |
| fn interned_len(&self, id: InternedString) -> usize; |
| } |
| |
| fn interned_len(db: &dyn InternedDB, id: InternedString) -> usize { |
| db.lookup_intern_string(id).len() |
| } |
| |
| #[test] |
| fn intern_round_trip() { |
| let db = LoggerDb::default(); |
| |
| let id = db.intern_string(String::from("Hello, world!")); |
| let s = db.lookup_intern_string(id); |
| |
| assert_eq!(s.len(), 13); |
| db.assert_logs(expect![[r#"[]"#]]); |
| } |
| |
| #[test] |
| fn intern_with_query() { |
| let db = LoggerDb::default(); |
| |
| let id = db.intern_string(String::from("Hello, world!")); |
| let len = db.interned_len(id); |
| |
| assert_eq!(len, 13); |
| db.assert_logs(expect![[r#" |
| [ |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(WillExecute { database_key: interned_len_shim(Id(0)) })", |
| ]"#]]); |
| } |