| use expect_test::expect; |
| use query_group_macro::query_group; |
| |
| mod logger_db; |
| use logger_db::LoggerDb; |
| |
| #[query_group] |
| pub trait HelloWorldDatabase: salsa::Database { |
| // input |
| // // input with no params |
| #[salsa::input] |
| fn input_string(&self) -> String; |
| |
| // unadorned query |
| #[salsa::invoke_interned(length_query)] |
| fn length_query(&self, key: ()) -> usize; |
| |
| // unadorned query |
| fn length_query_with_no_params(&self) -> usize; |
| |
| // renamed/invoke query |
| #[salsa::invoke_interned(invoke_length_query_actual)] |
| fn invoke_length_query(&self, key: ()) -> usize; |
| |
| // not a query. should not invoked |
| #[salsa::transparent] |
| fn transparent_length(&self, key: ()) -> usize; |
| |
| #[salsa::transparent] |
| #[salsa::invoke_interned(transparent_and_invoke_length_actual)] |
| fn transparent_and_invoke_length(&self, key: ()) -> usize; |
| } |
| |
| fn length_query(db: &dyn HelloWorldDatabase, _key: ()) -> usize { |
| db.input_string().len() |
| } |
| |
| fn length_query_with_no_params(db: &dyn HelloWorldDatabase) -> usize { |
| db.input_string().len() |
| } |
| |
| fn invoke_length_query_actual(db: &dyn HelloWorldDatabase, _key: ()) -> usize { |
| db.input_string().len() |
| } |
| |
| fn transparent_length(db: &dyn HelloWorldDatabase, _key: ()) -> usize { |
| db.input_string().len() |
| } |
| |
| fn transparent_and_invoke_length_actual(db: &dyn HelloWorldDatabase, _key: ()) -> usize { |
| db.input_string().len() |
| } |
| |
| #[test] |
| fn unadorned_query() { |
| let mut db = LoggerDb::default(); |
| |
| db.set_input_string(String::from("Hello, world!")); |
| let len = db.length_query(()); |
| |
| assert_eq!(len, 13); |
| db.assert_logs(expect![[r#" |
| [ |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(WillExecute { database_key: create_data_HelloWorldDatabase(Id(0)) })", |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(DidValidateMemoizedValue { database_key: create_data_HelloWorldDatabase(Id(0)) })", |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(WillExecute { database_key: length_query_shim(Id(800)) })", |
| "salsa_event(WillCheckCancellation)", |
| ]"#]]); |
| } |
| |
| #[test] |
| fn invoke_query() { |
| let mut db = LoggerDb::default(); |
| |
| db.set_input_string(String::from("Hello, world!")); |
| let len = db.invoke_length_query(()); |
| |
| assert_eq!(len, 13); |
| db.assert_logs(expect![[r#" |
| [ |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(WillExecute { database_key: create_data_HelloWorldDatabase(Id(0)) })", |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(DidValidateMemoizedValue { database_key: create_data_HelloWorldDatabase(Id(0)) })", |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(WillExecute { database_key: invoke_length_query_shim(Id(800)) })", |
| "salsa_event(WillCheckCancellation)", |
| ]"#]]); |
| } |
| |
| #[test] |
| fn transparent() { |
| let mut db = LoggerDb::default(); |
| |
| db.set_input_string(String::from("Hello, world!")); |
| let len = db.transparent_length(()); |
| |
| assert_eq!(len, 13); |
| db.assert_logs(expect![[r#" |
| [ |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(WillExecute { database_key: create_data_HelloWorldDatabase(Id(0)) })", |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(DidValidateMemoizedValue { database_key: create_data_HelloWorldDatabase(Id(0)) })", |
| ]"#]]); |
| } |
| |
| #[test] |
| fn transparent_invoke() { |
| let mut db = LoggerDb::default(); |
| |
| db.set_input_string(String::from("Hello, world!")); |
| let len = db.transparent_and_invoke_length(()); |
| |
| assert_eq!(len, 13); |
| db.assert_logs(expect![[r#" |
| [ |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(WillExecute { database_key: create_data_HelloWorldDatabase(Id(0)) })", |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(DidValidateMemoizedValue { database_key: create_data_HelloWorldDatabase(Id(0)) })", |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(WillExecute { database_key: transparent_and_invoke_length_shim(Id(800)) })", |
| "salsa_event(WillCheckCancellation)", |
| ]"#]]); |
| } |