Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ra-salsa/tests/incremental/implementation.rs')
-rw-r--r--crates/ra-salsa/tests/incremental/implementation.rs59
1 files changed, 59 insertions, 0 deletions
diff --git a/crates/ra-salsa/tests/incremental/implementation.rs b/crates/ra-salsa/tests/incremental/implementation.rs
new file mode 100644
index 0000000000..e9a59c4630
--- /dev/null
+++ b/crates/ra-salsa/tests/incremental/implementation.rs
@@ -0,0 +1,59 @@
+use crate::constants;
+use crate::counter::Counter;
+use crate::log::Log;
+use crate::memoized_dep_inputs;
+use crate::memoized_inputs;
+use crate::memoized_volatile;
+
+pub(crate) trait TestContext: ra_salsa::Database {
+ fn clock(&self) -> &Counter;
+ fn log(&self) -> &Log;
+}
+
+#[ra_salsa::database(
+ constants::Constants,
+ memoized_dep_inputs::MemoizedDepInputs,
+ memoized_inputs::MemoizedInputs,
+ memoized_volatile::MemoizedVolatile
+)]
+#[derive(Default)]
+pub(crate) struct TestContextImpl {
+ storage: ra_salsa::Storage<TestContextImpl>,
+ clock: Counter,
+ log: Log,
+}
+
+impl TestContextImpl {
+ #[track_caller]
+ pub(crate) fn assert_log(&self, expected_log: &[&str]) {
+ let expected_text = &format!("{expected_log:#?}");
+ let actual_text = &format!("{:#?}", self.log().take());
+
+ if expected_text == actual_text {
+ return;
+ }
+
+ #[allow(clippy::print_stdout)]
+ for diff in dissimilar::diff(expected_text, actual_text) {
+ match diff {
+ dissimilar::Chunk::Delete(l) => println!("-{l}"),
+ dissimilar::Chunk::Equal(l) => println!(" {l}"),
+ dissimilar::Chunk::Insert(r) => println!("+{r}"),
+ }
+ }
+
+ panic!("incorrect log results");
+ }
+}
+
+impl TestContext for TestContextImpl {
+ fn clock(&self) -> &Counter {
+ &self.clock
+ }
+
+ fn log(&self) -> &Log {
+ &self.log
+ }
+}
+
+impl ra_salsa::Database for TestContextImpl {}