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