mirror of
https://github.com/salsa-rs/salsa.git
synced 2025-12-23 08:48:10 +00:00
Some checks failed
Release-plz / Release-plz release (push) Has been cancelled
Release-plz / Release-plz PR (push) Has been cancelled
Test / Test (push) Has been cancelled
Book / Book (push) Has been cancelled
Test / Miri (push) Has been cancelled
Test / Shuttle (push) Has been cancelled
Test / Benchmarks (push) Has been cancelled
Book / Deploy (push) Has been cancelled
72 lines
1.3 KiB
Rust
72 lines
1.3 KiB
Rust
#![cfg(feature = "inventory")]
|
|
|
|
//! Tests that the durability correctly propagates
|
|
//! to all cycle heads.
|
|
|
|
use salsa::Setter as _;
|
|
|
|
#[test_log::test]
|
|
fn low_durability_cycle_enter_from_different_head() {
|
|
let mut db = MyDbImpl::default();
|
|
// Start with 0, the same as returned by cycle initial
|
|
let input = Input::builder(0).new(&db);
|
|
db.input = Some(input);
|
|
|
|
assert_eq!(query_a(&db), 0); // Prime the Db
|
|
|
|
input.set_value(&mut db).to(10);
|
|
|
|
assert_eq!(query_b(&db), 10);
|
|
}
|
|
|
|
#[salsa::input]
|
|
struct Input {
|
|
value: u32,
|
|
}
|
|
|
|
#[salsa::db]
|
|
trait MyDb: salsa::Database {
|
|
fn input(&self) -> Input;
|
|
}
|
|
|
|
#[salsa::db]
|
|
#[derive(Clone, Default)]
|
|
struct MyDbImpl {
|
|
storage: salsa::Storage<Self>,
|
|
input: Option<Input>,
|
|
}
|
|
|
|
#[salsa::db]
|
|
impl salsa::Database for MyDbImpl {}
|
|
|
|
#[salsa::db]
|
|
impl MyDb for MyDbImpl {
|
|
fn input(&self) -> Input {
|
|
self.input.unwrap()
|
|
}
|
|
}
|
|
|
|
#[salsa::tracked(cycle_initial=cycle_initial)]
|
|
fn query_a(db: &dyn MyDb) -> u32 {
|
|
query_b(db);
|
|
db.input().value(db)
|
|
}
|
|
|
|
fn cycle_initial(_db: &dyn MyDb, _id: salsa::Id) -> u32 {
|
|
0
|
|
}
|
|
|
|
#[salsa::interned]
|
|
struct Interned {
|
|
value: u32,
|
|
}
|
|
|
|
#[salsa::tracked(cycle_initial=cycle_initial)]
|
|
fn query_b<'db>(db: &'db dyn MyDb) -> u32 {
|
|
query_c(db)
|
|
}
|
|
|
|
#[salsa::tracked]
|
|
fn query_c(db: &dyn MyDb) -> u32 {
|
|
query_a(db)
|
|
}
|