Mercurial > public > mercurial-scm > hg-stable
diff rust/hg-core/src/revlog/nodemap.rs @ 50998:12c308c55e53
branching: merge stable into default
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 11 Oct 2023 02:02:46 +0200 |
parents | 4c5f6e95df84 eccf7dc7c91e |
children | 532e74ad3ff6 |
line wrap: on
line diff
--- a/rust/hg-core/src/revlog/nodemap.rs Wed Jan 25 15:34:27 2023 +0100 +++ b/rust/hg-core/src/revlog/nodemap.rs Wed Oct 11 02:02:46 2023 +0200 @@ -693,7 +693,7 @@ } #[cfg(test)] -mod tests { +pub mod tests { use super::NodeMapError::*; use super::*; use crate::revlog::node::{hex_pad_right, Node}; @@ -871,29 +871,36 @@ Ok(()) } - struct TestNtIndex { - index: TestIndex, - nt: NodeTree, + pub struct TestNtIndex { + pub index: TestIndex, + pub nt: NodeTree, } impl TestNtIndex { - fn new() -> Self { + pub fn new() -> Self { TestNtIndex { index: HashMap::new(), nt: NodeTree::default(), } } - fn insert(&mut self, rev: i32, hex: &str) -> Result<(), NodeMapError> { + pub fn insert_node( + &mut self, + rev: Revision, + node: Node, + ) -> Result<(), NodeMapError> { + self.index.insert(rev.into(), node); + self.nt.insert(&self.index, &node, rev)?; + Ok(()) + } + + pub fn insert( + &mut self, + rev: Revision, + hex: &str, + ) -> Result<(), NodeMapError> { let node = pad_node(hex); - let rev: UncheckedRevision = rev.into(); - self.index.insert(rev, node); - self.nt.insert( - &self.index, - &node, - self.index.check_revision(rev).unwrap(), - )?; - Ok(()) + return self.insert_node(rev, node); } fn find_hex( @@ -927,23 +934,23 @@ #[test] fn test_insert_full_mutable() -> Result<(), NodeMapError> { let mut idx = TestNtIndex::new(); - idx.insert(0, "1234")?; + idx.insert(Revision(0), "1234")?; assert_eq!(idx.find_hex("1")?, Some(R!(0))); assert_eq!(idx.find_hex("12")?, Some(R!(0))); // let's trigger a simple split - idx.insert(1, "1a34")?; + idx.insert(Revision(1), "1a34")?; assert_eq!(idx.nt.growable.len(), 1); assert_eq!(idx.find_hex("12")?, Some(R!(0))); assert_eq!(idx.find_hex("1a")?, Some(R!(1))); // reinserting is a no_op - idx.insert(1, "1a34")?; + idx.insert(Revision(1), "1a34")?; assert_eq!(idx.nt.growable.len(), 1); assert_eq!(idx.find_hex("12")?, Some(R!(0))); assert_eq!(idx.find_hex("1a")?, Some(R!(1))); - idx.insert(2, "1a01")?; + idx.insert(Revision(2), "1a01")?; assert_eq!(idx.nt.growable.len(), 2); assert_eq!(idx.find_hex("1a"), Err(NodeMapError::MultipleResults)); assert_eq!(idx.find_hex("12")?, Some(R!(0))); @@ -952,7 +959,7 @@ assert_eq!(idx.find_hex("1a12")?, None); // now let's make it split and create more than one additional block - idx.insert(3, "1a345")?; + idx.insert(Revision(3), "1a345")?; assert_eq!(idx.nt.growable.len(), 4); assert_eq!(idx.find_hex("1a340")?, Some(R!(1))); assert_eq!(idx.find_hex("1a345")?, Some(R!(3))); @@ -966,7 +973,7 @@ #[test] fn test_unique_prefix_len_zero_prefix() { let mut idx = TestNtIndex::new(); - idx.insert(0, "00000abcd").unwrap(); + idx.insert(Revision(0), "00000abcd").unwrap(); assert_eq!(idx.find_hex("000"), Err(NodeMapError::MultipleResults)); // in the nodetree proper, this will be found at the first nybble @@ -976,7 +983,7 @@ assert_eq!(idx.unique_prefix_len_hex("00000ab"), Ok(Some(6))); // same with odd result - idx.insert(1, "00123").unwrap(); + idx.insert(Revision(1), "00123").unwrap(); assert_eq!(idx.unique_prefix_len_hex("001"), Ok(Some(3))); assert_eq!(idx.unique_prefix_len_hex("0012"), Ok(Some(3))); @@ -1012,10 +1019,10 @@ #[test] fn test_insert_partly_immutable() -> Result<(), NodeMapError> { let mut idx = TestNtIndex::new(); - idx.insert(0, "1234")?; - idx.insert(1, "1235")?; - idx.insert(2, "131")?; - idx.insert(3, "cafe")?; + idx.insert(Revision(0), "1234")?; + idx.insert(Revision(1), "1235")?; + idx.insert(Revision(2), "131")?; + idx.insert(Revision(3), "cafe")?; let mut idx = idx.commit(); assert_eq!(idx.find_hex("1234")?, Some(R!(0))); assert_eq!(idx.find_hex("1235")?, Some(R!(1))); @@ -1024,7 +1031,7 @@ // we did not add anything since init from readonly assert_eq!(idx.nt.masked_readonly_blocks(), 0); - idx.insert(4, "123A")?; + idx.insert(Revision(4), "123A")?; assert_eq!(idx.find_hex("1234")?, Some(R!(0))); assert_eq!(idx.find_hex("1235")?, Some(R!(1))); assert_eq!(idx.find_hex("131")?, Some(R!(2))); @@ -1034,7 +1041,7 @@ assert_eq!(idx.nt.masked_readonly_blocks(), 4); eprintln!("{:?}", idx.nt); - idx.insert(5, "c0")?; + idx.insert(Revision(5), "c0")?; assert_eq!(idx.find_hex("cafe")?, Some(R!(3))); assert_eq!(idx.find_hex("c0")?, Some(R!(5))); assert_eq!(idx.find_hex("c1")?, None); @@ -1049,10 +1056,10 @@ #[test] fn test_invalidate_all() -> Result<(), NodeMapError> { let mut idx = TestNtIndex::new(); - idx.insert(0, "1234")?; - idx.insert(1, "1235")?; - idx.insert(2, "131")?; - idx.insert(3, "cafe")?; + idx.insert(Revision(0), "1234")?; + idx.insert(Revision(1), "1235")?; + idx.insert(Revision(2), "131")?; + idx.insert(Revision(3), "cafe")?; let mut idx = idx.commit(); idx.nt.invalidate_all(); @@ -1079,9 +1086,9 @@ #[test] fn test_into_added_bytes() -> Result<(), NodeMapError> { let mut idx = TestNtIndex::new(); - idx.insert(0, "1234")?; + idx.insert(Revision(0), "1234")?; let mut idx = idx.commit(); - idx.insert(4, "cafe")?; + idx.insert(Revision(4), "cafe")?; let (_, bytes) = idx.nt.into_readonly_and_added_bytes(); // only the root block has been changed