refactor: StringForge 规范化类型命名

This commit is contained in:
2026-06-05 23:24:07 +08:00
parent 0a0c94f975
commit efbecd62ca
3 changed files with 41 additions and 41 deletions
+30 -30
View File
@@ -17,19 +17,19 @@ pub struct StringEntry {
pub hash: u16,
}
struct InternerInner {
struct StringForgeInner {
map: HashMap<String, u32, FxBuildHasher>,
entries: Vec<StringEntry>,
}
pub struct Interner {
inner: RwLock<InternerInner>,
pub struct StringForge {
inner: RwLock<StringForgeInner>,
}
impl Interner {
impl StringForge {
pub fn new() -> Self {
Self {
inner: RwLock::new(InternerInner {
inner: RwLock::new(StringForgeInner {
map: HashMap::with_hasher(FxBuildHasher::default()),
entries: Vec::new(),
}),
@@ -111,7 +111,7 @@ impl Interner {
}
}
impl Default for Interner {
impl Default for StringForge {
fn default() -> Self {
Self::new()
}
@@ -133,56 +133,56 @@ mod tests {
#[test]
fn test_intern_dedup() {
let interner = Interner::new();
let (i1, h1) = interner.intern("abc");
let (i2, h2) = interner.intern("abc");
let string_forge = StringForge::new();
let (i1, h1) = string_forge.intern("abc");
let (i2, h2) = string_forge.intern("abc");
assert_eq!(i1, i2);
assert_eq!(h1, h2);
}
#[test]
fn test_intern_different() {
let interner = Interner::new();
let (i1, _) = interner.intern("x");
let (i2, _) = interner.intern("y");
let string_forge = StringForge::new();
let (i1, _) = string_forge.intern("x");
let (i2, _) = string_forge.intern("y");
assert_ne!(i1, i2);
}
#[test]
fn test_lookup_found() {
let interner = Interner::new();
let (idx, _) = interner.intern("hello");
assert_eq!(interner.lookup(idx), Some("hello".to_string()));
let string_forge = StringForge::new();
let (idx, _) = string_forge.intern("hello");
assert_eq!(string_forge.lookup(idx), Some("hello".to_string()));
}
#[test]
fn test_lookup_not_found() {
let interner = Interner::new();
assert_eq!(interner.lookup(99999), None);
let string_forge = StringForge::new();
assert_eq!(string_forge.lookup(99999), None);
}
#[test]
fn test_ref_count_and_decref() {
let interner = Interner::new();
let (idx, _) = interner.intern("s");
assert_eq!(interner.lookup(idx), Some("s".to_string()));
interner.decref(idx);
assert_eq!(interner.lookup(idx), Some("s".to_string()));
let string_forge = StringForge::new();
let (idx, _) = string_forge.intern("s");
assert_eq!(string_forge.lookup(idx), Some("s".to_string()));
string_forge.decref(idx);
assert_eq!(string_forge.lookup(idx), Some("s".to_string()));
}
#[test]
fn test_maybe_sweep_noop_when_none() {
let interner = Interner::new();
interner.intern("live");
interner.maybe_sweep(None);
assert!(interner.lookup(0).is_some());
let string_forge = StringForge::new();
string_forge.intern("live");
string_forge.maybe_sweep(None);
assert!(string_forge.lookup(0).is_some());
}
#[test]
fn test_maybe_sweep_skip_below_threshold() {
let interner = Interner::new();
interner.intern("live");
interner.maybe_sweep(Some(100));
assert_eq!(interner.lookup(0), Some("live".to_string()));
let string_forge = StringForge::new();
string_forge.intern("live");
string_forge.maybe_sweep(Some(100));
assert_eq!(string_forge.lookup(0), Some("live".to_string()));
}
}