salsa/tests/incremental/implementation.rs

68 lines
1.6 KiB
Rust
Raw Normal View History

use crate::constants;
use crate::counter::Counter;
use crate::log::Log;
use crate::memoized_dep_inputs;
2018-09-30 14:50:46 +00:00
use crate::memoized_inputs;
use crate::memoized_volatile;
2018-10-09 19:34:30 +00:00
pub(crate) trait TestContext: salsa::Database {
fn clock(&self) -> &Counter;
fn log(&self) -> &Log;
}
#[derive(Default)]
2018-10-09 19:34:30 +00:00
pub(crate) struct TestContextImpl {
2018-10-07 11:08:22 +00:00
runtime: salsa::Runtime<TestContextImpl>,
clock: Counter,
log: Log,
}
impl TestContextImpl {
2018-10-09 19:34:30 +00:00
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;
}
for diff in diff::lines(expected_text, actual_text) {
match diff {
diff::Result::Left(l) => println!("-{}", l),
diff::Result::Both(l, _) => println!(" {}", l),
diff::Result::Right(r) => println!("+{}", r),
}
}
panic!("incorrect log results");
}
}
2018-10-05 08:54:51 +00:00
salsa::database_storage! {
pub(crate) TestContextImpl {
impl constants::ConstantsDatabase;
impl memoized_dep_inputs::MemoizedDepInputsContext;
2018-09-30 14:50:46 +00:00
impl memoized_inputs::MemoizedInputsContext;
impl memoized_volatile::MemoizedVolatileContext;
}
}
impl TestContext for TestContextImpl {
fn clock(&self) -> &Counter {
&self.clock
}
fn log(&self) -> &Log {
&self.log
}
}
2018-10-05 08:54:51 +00:00
impl salsa::Database for TestContextImpl {
2018-10-07 11:08:22 +00:00
fn salsa_runtime(&self) -> &salsa::Runtime<TestContextImpl> {
&self.runtime
}
}