mirror of
https://github.com/salsa-rs/salsa.git
synced 2024-11-24 04:09:36 +00:00
55 lines
2.1 KiB
Rust
55 lines
2.1 KiB
Rust
#![allow(warnings)]
|
|
|
|
use expect_test::expect;
|
|
|
|
use common::{EventLoggerDatabase, HasLogger, LogDatabase, Logger};
|
|
use salsa::plumbing::HasStorage;
|
|
use salsa::{Database, Durability, Event, EventKind, Setter};
|
|
|
|
mod common;
|
|
#[salsa::input]
|
|
struct MyInput {
|
|
field: u32,
|
|
}
|
|
|
|
#[salsa::tracked]
|
|
fn tracked_fn(db: &dyn salsa::Database, input: MyInput) -> u32 {
|
|
input.field(db) * 2
|
|
}
|
|
|
|
#[test]
|
|
fn execute() {
|
|
let mut db = EventLoggerDatabase::default();
|
|
let input_low = MyInput::new(&db, 22);
|
|
let input_high = MyInput::builder(2200).durability(Durability::HIGH).new(&db);
|
|
|
|
assert_eq!(tracked_fn(&db, input_low), 44);
|
|
assert_eq!(tracked_fn(&db, input_high), 4400);
|
|
|
|
db.assert_logs(expect![[r#"
|
|
[
|
|
"Event { thread_id: ThreadId(2), kind: WillCheckCancellation }",
|
|
"Event { thread_id: ThreadId(2), kind: WillExecute { database_key: tracked_fn(Id(0)) } }",
|
|
"Event { thread_id: ThreadId(2), kind: WillCheckCancellation }",
|
|
"Event { thread_id: ThreadId(2), kind: WillExecute { database_key: tracked_fn(Id(1)) } }",
|
|
]"#]]);
|
|
|
|
db.synthetic_write(Durability::LOW);
|
|
|
|
assert_eq!(tracked_fn(&db, input_low), 44);
|
|
assert_eq!(tracked_fn(&db, input_high), 4400);
|
|
|
|
// FIXME: There's currently no good way to verify whether an input was validated using shallow or deep comparison.
|
|
// All we can do for now is verify that the values were validated.
|
|
// Note: It maybe confusing why it validates `input_high` when the write has `Durability::LOW`.
|
|
// This is because all values must be validated whenever a write occurs. It doesn't mean that it
|
|
// executed the query.
|
|
db.assert_logs(expect![[r#"
|
|
[
|
|
"Event { thread_id: ThreadId(2), kind: DidSetCancellationFlag }",
|
|
"Event { thread_id: ThreadId(2), kind: WillCheckCancellation }",
|
|
"Event { thread_id: ThreadId(2), kind: DidValidateMemoizedValue { database_key: tracked_fn(Id(0)) } }",
|
|
"Event { thread_id: ThreadId(2), kind: WillCheckCancellation }",
|
|
"Event { thread_id: ThreadId(2), kind: DidValidateMemoizedValue { database_key: tracked_fn(Id(1)) } }",
|
|
]"#]]);
|
|
}
|