salsa/tests/storage_varieties/tests.rs

50 lines
1.3 KiB
Rust
Raw Normal View History

#![cfg(test)]
2018-10-05 08:54:51 +00:00
use crate::implementation::DatabaseImpl;
use crate::queries::Database;
use salsa::Database as _Database;
use salsa::Durability;
2018-09-29 08:50:08 +00:00
#[test]
fn memoized_twice() {
let db = DatabaseImpl::default();
2018-10-19 01:26:48 +00:00
let v1 = db.memoized();
let v2 = db.memoized();
2018-09-29 08:50:08 +00:00
assert_eq!(v1, v2);
}
#[test]
2018-09-30 10:09:37 +00:00
fn volatile_twice() {
let db = DatabaseImpl::default();
2018-10-19 01:26:48 +00:00
let v1 = db.volatile();
let v2 = db.volatile(); // volatiles are cached, so 2nd read returns the same
assert_eq!(v1, v2);
db.salsa_runtime().synthetic_write(Durability::LOW); // clears volatile caches
2018-10-19 01:26:48 +00:00
let v3 = db.volatile(); // will re-increment the counter
let v4 = db.volatile(); // second call will be cached
assert_eq!(v1 + 1, v3);
assert_eq!(v3, v4);
2018-09-29 08:50:08 +00:00
}
2018-09-29 08:53:59 +00:00
#[test]
fn intermingled() {
let db = DatabaseImpl::default();
2018-10-19 01:26:48 +00:00
let v1 = db.volatile();
let v2 = db.memoized();
let v3 = db.volatile(); // cached
let v4 = db.memoized(); // cached
assert_eq!(v1, v2);
assert_eq!(v1, v3);
2018-09-29 08:53:59 +00:00
assert_eq!(v2, v4);
db.salsa_runtime().synthetic_write(Durability::LOW); // clears volatile caches
2018-10-19 01:26:48 +00:00
let v5 = db.memoized(); // re-executes volatile, caches new result
let v6 = db.memoized(); // re-use cached result
assert_eq!(v4 + 1, v5);
assert_eq!(v5, v6);
2018-09-29 08:53:59 +00:00
}