mirror of
https://github.com/salsa-rs/salsa.git
synced 2025-07-07 21:35:17 +00:00

Some checks are pending
Book / Book (push) Waiting to run
Book / Deploy (push) Blocked by required conditions
Release-plz / Release-plz release (push) Waiting to run
Release-plz / Release-plz PR (push) Waiting to run
Test / Test (push) Waiting to run
Test / Miri (push) Waiting to run
Test / Shuttle (push) Waiting to run
Test / Benchmarks (push) Waiting to run
36 lines
777 B
Rust
36 lines
777 B
Rust
//! Calling back into the same cycle from your cycle initial function will trigger another cycle.
|
|
|
|
#[salsa::tracked]
|
|
fn initial_value(db: &dyn salsa::Database) -> u32 {
|
|
query(db)
|
|
}
|
|
|
|
#[salsa::tracked(cycle_fn=cycle_fn, cycle_initial=cycle_initial)]
|
|
fn query(db: &dyn salsa::Database) -> u32 {
|
|
let val = query(db);
|
|
if val < 5 {
|
|
val + 1
|
|
} else {
|
|
val
|
|
}
|
|
}
|
|
|
|
fn cycle_initial(db: &dyn salsa::Database) -> u32 {
|
|
initial_value(db)
|
|
}
|
|
|
|
fn cycle_fn(
|
|
_db: &dyn salsa::Database,
|
|
_value: &u32,
|
|
_count: u32,
|
|
) -> salsa::CycleRecoveryAction<u32> {
|
|
salsa::CycleRecoveryAction::Iterate
|
|
}
|
|
|
|
#[test_log::test]
|
|
#[should_panic(expected = "dependency graph cycle")]
|
|
fn the_test() {
|
|
let db = salsa::DatabaseImpl::default();
|
|
|
|
query(&db);
|
|
}
|