From efa8b0f307207fc1a8060f2a37ff03406fb93cc9 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Thu, 11 Oct 2018 04:53:24 -0400 Subject: [PATCH] add some simple tests using `is_constant` --- tests/incremental/constants.rs | 55 +++++++++++++++++++++++------ tests/incremental/implementation.rs | 2 +- 2 files changed, 45 insertions(+), 12 deletions(-) diff --git a/tests/incremental/constants.rs b/tests/incremental/constants.rs index fa6ecae5..ea054b9b 100644 --- a/tests/incremental/constants.rs +++ b/tests/incremental/constants.rs @@ -1,30 +1,32 @@ use crate::implementation::{TestContext, TestContextImpl}; +use salsa::debug::DebugQueryTable; use salsa::Database; salsa::query_group! { pub(crate) trait ConstantsDatabase: TestContext { - fn constants_input(key: usize) -> usize { + fn constants_input(key: char) -> usize { type ConstantsInput; storage input; } - fn constants_derived(key: usize) -> usize { - type ConstantsDerived; + fn constants_add(keys: (char, char)) -> usize { + type ConstantsAdd; } } } -fn constants_derived(db: &impl ConstantsDatabase, key: usize) -> usize { - db.log().add(format!("constants_derived({}) invoked", key)); - db.constants_input(key) * 2 +fn constants_add(db: &impl ConstantsDatabase, (key1, key2): (char, char)) -> usize { + db.log() + .add(format!("constants_derived({}, {}) invoked", key1, key2)); + db.constants_input(key1) + db.constants_input(key2) } #[test] #[should_panic] fn invalidate_constant() { let db = &TestContextImpl::default(); - db.query(ConstantsInput).set_constant(22, 44); - db.query(ConstantsInput).set_constant(22, 66); + db.query(ConstantsInput).set_constant('a', 44); + db.query(ConstantsInput).set_constant('a', 66); } #[test] @@ -33,11 +35,42 @@ fn invalidate_constant_1() { let db = &TestContextImpl::default(); // Not constant: - db.query(ConstantsInput).set(22, 44); + db.query(ConstantsInput).set('a', 44); // Becomes constant: - db.query(ConstantsInput).set_constant(22, 44); + db.query(ConstantsInput).set_constant('a', 44); // Invalidates: - db.query(ConstantsInput).set_constant(22, 66); + db.query(ConstantsInput).set_constant('a', 66); +} + +#[test] +fn not_constant() { + let db = &TestContextImpl::default(); + + db.query(ConstantsInput).set('a', 22); + db.query(ConstantsInput).set('b', 44); + assert_eq!(db.constants_add(('a', 'b')), 66); + assert!(!db.query(ConstantsAdd).is_constant(('a', 'b'))); +} + +#[test] +fn is_constant() { + let db = &TestContextImpl::default(); + + db.query(ConstantsInput).set_constant('a', 22); + db.query(ConstantsInput).set_constant('b', 44); + assert_eq!(db.constants_add(('a', 'b')), 66); + assert!(db.query(ConstantsAdd).is_constant(('a', 'b'))); +} + +#[test] +fn mixed_constant() { + let db = &TestContextImpl::default(); + + db.query(ConstantsInput).set_constant('a', 22); + db.query(ConstantsInput).set('b', 44); + assert_eq!(db.constants_add(('a', 'b')), 66); + assert!(!db.query(ConstantsAdd).is_constant(('a', 'b'))); +} } diff --git a/tests/incremental/implementation.rs b/tests/incremental/implementation.rs index 8fba2ce7..36809bef 100644 --- a/tests/incremental/implementation.rs +++ b/tests/incremental/implementation.rs @@ -46,7 +46,7 @@ salsa::database_storage! { pub(crate) struct TestContextImplStorage for TestContextImpl { impl constants::ConstantsDatabase { fn constants_input() for constants::ConstantsInput; - fn constants_derived() for constants::ConstantsDerived; + fn constants_derived() for constants::ConstantsAdd; } impl memoized_dep_inputs::MemoizedDepInputsContext {