diff --git a/Cargo.lock b/Cargo.lock index 2624eb82c..e93849f52 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1327,6 +1327,7 @@ dependencies = [ "merc_aterm", "merc_data", "merc_syntax", + "merc_typecheck", "merc_utilities", "rand", "rustc-hash 2.1.2", @@ -1432,6 +1433,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "merc_typecheck" +version = "2.0.0" +dependencies = [ + "indoc", + "merc_collections", + "merc_syntax", + "merc_utilities", + "thiserror", +] + [[package]] name = "merc_unsafety" version = "2.0.0" diff --git a/Cargo.toml b/Cargo.toml index 04724d04c..fd21d4aa7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,6 +42,7 @@ members = [ "crates/symbolic", "crates/syntax", "crates/tools", + "crates/typecheck", "crates/unsafety", "crates/utilities", "crates/vpg", @@ -132,9 +133,9 @@ merc_ldd = { version = "3.0", path = "crates/ldd" } merc_lts = { version = "2.0", path = "crates/lts" } merc_macros = { version = "2.0", path = "crates/macros" } merc_number = { version = "2.0", path = "crates/number" } -merc_refinement = { version = "2.0", path = "crates/refinement" } merc_rec-tests = { path = "crates/rec-tests" } merc_reduction = { version = "2.0", path = "crates/reduction" } +merc_refinement = { version = "2.0", path = "crates/refinement" } merc_sabre = { version = "2.0", path = "crates/sabre" } merc_sabre-compiling = { path = "crates/sabre_compiling" } merc_sabre-ffi = { path = "crates/sabre_compiling/sabre_ffi" } @@ -142,6 +143,7 @@ merc_sharedmutex = { version = "2.0", path = "crates/sharedmutex" } merc_symbolic = { version = "3.0", path = "crates/symbolic", features = ["clap"] } merc_syntax = { version = "2.0", path = "crates/syntax" } merc_tools = { path = "crates/tools" } +merc_typecheck = { path = "crates/typecheck" } merc_unsafety = { version = "2.0", path = "crates/unsafety" } merc_utilities = { version = "3.0", path = "crates/utilities" } merc_vpg = { path = "crates/vpg", features = ["clap"] } diff --git a/crates/collections/src/block_partition.rs b/crates/collections/src/block_partition.rs index 13f257267..56dadb917 100644 --- a/crates/collections/src/block_partition.rs +++ b/crates/collections/src/block_partition.rs @@ -31,6 +31,10 @@ impl BlockPartition { impl BlockPartition { /// Create a block partition from an indexed partition. + /// + /// This function creates a new partition that is dense, i.e. it does not + /// contain empty blocks, and the blocks are indexed from 0 to n-1 even if the + /// indexed partition is sparse. pub fn from_indexed_partition(partition: &IndexedPartition) -> Self { let mut blocks = vec![Block::new_empty(); partition.num_of_blocks()]; let num_of_blocks = partition.iter().count(); @@ -253,11 +257,15 @@ impl Iterator for BlockIter<'_> { #[cfg(test)] mod tests { - use merc_utilities::random_test; use rand::RngExt; use rand::seq::IteratorRandom; - use super::*; + use merc_utilities::random_test; + + use super::BlockIndex; + use super::BlockPartition; + use super::IndexedPartition; + use super::trace; #[test] fn test_simple_block_partition() { @@ -302,6 +310,11 @@ mod tests { expected_block, "Block {block} contains elements from different indexed-partition blocks" ); + assert_eq!( + partition.block(element), + expected_block, + "Block {block} contains elements from different indexed-partition blocks" + ); } } }) diff --git a/crates/collections/src/compressed_vec.rs b/crates/collections/src/compressed_vec.rs index de25afd6b..4b4fb9d4b 100644 --- a/crates/collections/src/compressed_vec.rs +++ b/crates/collections/src/compressed_vec.rs @@ -484,14 +484,15 @@ impl CompressedEntry for TagIndex { #[cfg(test)] mod tests { - use super::*; - use rand::RngExt; use rand::distr::Uniform; use rand::seq::SliceRandom; use merc_utilities::random_test; + use super::ByteCompressedVec; + use super::CompressedEntry; + #[test] fn test_index_bytevector() { let mut vec = ByteCompressedVec::new(); diff --git a/crates/collections/src/indexed_set.rs b/crates/collections/src/indexed_set.rs index d98b158e4..bff52951c 100644 --- a/crates/collections/src/indexed_set.rs +++ b/crates/collections/src/indexed_set.rs @@ -382,9 +382,8 @@ impl<'a, T, S> IntoIterator for &'a IndexedSet { #[cfg(test)] mod tests { - use std::collections::HashMap; - use rand::RngExt; + use std::collections::HashMap; use merc_utilities::random_test; diff --git a/crates/lts/src/labelled_transition_system.rs b/crates/lts/src/labelled_transition_system.rs index fdd9050c0..f8d48758f 100644 --- a/crates/lts/src/labelled_transition_system.rs +++ b/crates/lts/src/labelled_transition_system.rs @@ -1,6 +1,7 @@ #![forbid(unsafe_code)] use std::collections::HashMap; +use std::collections::HashSet; use std::fmt; use merc_collections::ByteCompressedVec; @@ -412,6 +413,26 @@ impl LabelledTransitionSystem