Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/query-group-macro/tests/old_and_new.rs')
-rw-r--r--crates/query-group-macro/tests/old_and_new.rs109
1 files changed, 109 insertions, 0 deletions
diff --git a/crates/query-group-macro/tests/old_and_new.rs b/crates/query-group-macro/tests/old_and_new.rs
new file mode 100644
index 0000000000..a18b23a7d8
--- /dev/null
+++ b/crates/query-group-macro/tests/old_and_new.rs
@@ -0,0 +1,109 @@
+use expect_test::expect;
+
+mod logger_db;
+use logger_db::LoggerDb;
+use query_group_macro::query_group;
+
+#[salsa::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::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::input]
+ struct Input {
+ str: String,
+ }
+
+ #[salsa::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)) })",
+ ]"#]]);
+}