| use expect_test::expect; |
| |
| mod logger_db; |
| use logger_db::LoggerDb; |
| use query_group_macro::query_group; |
| |
| #[salsa_macros::input] |
| struct Input { |
| str: String, |
| } |
| |
| #[query_group] |
| trait PartialMigrationDatabase: salsa::Database { |
| fn length_query(&self, input: Input) -> usize; |
| |
| // renamed/invoke query |
| #[salsa::invoke(invoke_length_query_actual)] |
| fn invoke_length_query(&self, input: Input) -> usize; |
| |
| // invoke tracked function |
| #[salsa::invoke(invoke_length_tracked_actual)] |
| fn invoke_length_tracked(&self, input: Input) -> usize; |
| } |
| |
| fn length_query(db: &dyn PartialMigrationDatabase, input: Input) -> usize { |
| input.str(db).len() |
| } |
| |
| fn invoke_length_query_actual(db: &dyn PartialMigrationDatabase, input: Input) -> usize { |
| input.str(db).len() |
| } |
| |
| #[salsa_macros::tracked] |
| fn invoke_length_tracked_actual(db: &dyn PartialMigrationDatabase, input: Input) -> usize { |
| input.str(db).len() |
| } |
| |
| #[test] |
| fn unadorned_query() { |
| let db = LoggerDb::default(); |
| |
| let input = Input::new(&db, String::from("Hello, world!")); |
| let len = db.length_query(input); |
| |
| assert_eq!(len, 13); |
| db.assert_logs(expect![[r#" |
| [ |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(WillExecute { database_key: length_query_shim(Id(0)) })", |
| ]"#]]); |
| } |
| |
| #[test] |
| fn invoke_query() { |
| let db = LoggerDb::default(); |
| |
| let input = Input::new(&db, String::from("Hello, world!")); |
| let len = db.invoke_length_query(input); |
| |
| assert_eq!(len, 13); |
| db.assert_logs(expect![[r#" |
| [ |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(WillExecute { database_key: invoke_length_query_shim(Id(0)) })", |
| ]"#]]); |
| } |
| |
| // todo: does this even make sense? |
| #[test] |
| fn invoke_tracked_query() { |
| let db = LoggerDb::default(); |
| |
| let input = Input::new(&db, String::from("Hello, world!")); |
| let len = db.invoke_length_tracked(input); |
| |
| assert_eq!(len, 13); |
| db.assert_logs(expect![[r#" |
| [ |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(WillExecute { database_key: invoke_length_tracked_shim(Id(0)) })", |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(WillExecute { database_key: invoke_length_tracked_actual(Id(0)) })", |
| ]"#]]); |
| } |
| |
| #[test] |
| fn new_salsa_baseline() { |
| let db = LoggerDb::default(); |
| |
| #[salsa_macros::input] |
| struct Input { |
| str: String, |
| } |
| |
| #[salsa_macros::tracked] |
| fn new_salsa_length_query(db: &dyn PartialMigrationDatabase, input: Input) -> usize { |
| input.str(db).len() |
| } |
| |
| let input = Input::new(&db, String::from("Hello, world!")); |
| let len = new_salsa_length_query(&db, input); |
| |
| assert_eq!(len, 13); |
| db.assert_logs(expect![[r#" |
| [ |
| "salsa_event(WillCheckCancellation)", |
| "salsa_event(WillExecute { database_key: new_salsa_length_query(Id(0)) })", |
| ]"#]]); |
| } |