|  | 
|  | 1 | +use std::path::PathBuf; | 
|  | 2 | + | 
|  | 3 | +use crate::utils::cache::{INTERNER, Internable, TyIntern}; | 
|  | 4 | + | 
|  | 5 | +#[test] | 
|  | 6 | +fn test_string_interning() { | 
|  | 7 | +    let s1 = INTERNER.intern_str("Hello"); | 
|  | 8 | +    let s2 = INTERNER.intern_str("Hello"); | 
|  | 9 | +    let s3 = INTERNER.intern_str("world"); | 
|  | 10 | + | 
|  | 11 | +    assert_eq!(s1, s2, "Same strings should be interned to the same instance"); | 
|  | 12 | +    assert_ne!(s1, s3, "Different strings should have different interned values"); | 
|  | 13 | +} | 
|  | 14 | + | 
|  | 15 | +#[test] | 
|  | 16 | +fn test_path_interning() { | 
|  | 17 | +    let p1 = PathBuf::from("/tmp/file").intern(); | 
|  | 18 | +    let p2 = PathBuf::from("/tmp/file").intern(); | 
|  | 19 | +    let p3 = PathBuf::from("/tmp/other").intern(); | 
|  | 20 | + | 
|  | 21 | +    assert_eq!(p1, p2); | 
|  | 22 | +    assert_ne!(p1, p3); | 
|  | 23 | +} | 
|  | 24 | + | 
|  | 25 | +#[test] | 
|  | 26 | +fn test_vec_interning() { | 
|  | 27 | +    let v1 = vec!["a".to_string(), "b".to_string()].intern(); | 
|  | 28 | +    let v2 = vec!["a".to_string(), "b".to_string()].intern(); | 
|  | 29 | +    let v3 = vec!["c".to_string()].intern(); | 
|  | 30 | + | 
|  | 31 | +    assert_eq!(v1, v2); | 
|  | 32 | +    assert_ne!(v1, v3); | 
|  | 33 | +} | 
|  | 34 | + | 
|  | 35 | +#[test] | 
|  | 36 | +fn test_interned_equality() { | 
|  | 37 | +    let s1 = INTERNER.intern_str("test"); | 
|  | 38 | +    let s2 = INTERNER.intern_str("test"); | 
|  | 39 | + | 
|  | 40 | +    assert_eq!(s1, s2); | 
|  | 41 | +    assert_eq!(s1, "test"); | 
|  | 42 | +} | 
|  | 43 | + | 
|  | 44 | +#[test] | 
|  | 45 | +fn test_ty_intern_intern_borrow() { | 
|  | 46 | +    let mut interner = TyIntern::default(); | 
|  | 47 | +    let s1 = interner.intern_borrow("borrowed"); | 
|  | 48 | +    let s2 = interner.intern("borrowed".to_string()); | 
|  | 49 | + | 
|  | 50 | +    assert_eq!(s1, s2); | 
|  | 51 | +    assert_eq!(interner.get(s1), "borrowed"); | 
|  | 52 | +} | 
0 commit comments