1 use crate::group; 2 use crate::interned; 3 use crate::log::{HasLog, Log}; 4 use crate::volatile_tests; 5 6 #[salsa::database(group::Gc, interned::Intern, volatile_tests::Volatile)] 7 #[derive(Default)] 8 pub(crate) struct DatabaseImpl { 9 storage: salsa::Storage<Self>, 10 log: Log, 11 } 12 13 impl salsa::Database for DatabaseImpl {} 14 15 impl DatabaseImpl { clear_log(&self)16 pub(crate) fn clear_log(&self) { 17 self.log().take(); 18 } 19 assert_log(&self, expected_log: &[&str])20 pub(crate) fn assert_log(&self, expected_log: &[&str]) { 21 let expected_text = &format!("{:#?}", expected_log); 22 let actual_text = &format!("{:#?}", self.log().take()); 23 24 if expected_text == actual_text { 25 return; 26 } 27 28 for diff in diff::lines(expected_text, actual_text) { 29 match diff { 30 diff::Result::Left(l) => println!("-{}", l), 31 diff::Result::Both(l, _) => println!(" {}", l), 32 diff::Result::Right(r) => println!("+{}", r), 33 } 34 } 35 36 panic!("incorrect log results"); 37 } 38 } 39 40 impl HasLog for DatabaseImpl { log(&self) -> &Log41 fn log(&self) -> &Log { 42 &self.log 43 } 44 } 45