mirror of
https://github.com/erg-lang/erg.git
synced 2025-08-04 18:58:30 +00:00
fix: VarName::hash
This commit is contained in:
parent
e7ff9f4ea7
commit
d230bb7374
2 changed files with 62 additions and 2 deletions
|
@ -394,3 +394,40 @@ impl<K: Hash + Eq, V> Dict<K, V> {
|
|||
self.dict.entry(k)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
use crate::str::Str;
|
||||
|
||||
#[test]
|
||||
fn test_dict() {
|
||||
let mut dict = Dict::new();
|
||||
dict.insert(Str::from("a"), 1);
|
||||
dict.insert(Str::from("b"), 2);
|
||||
dict.insert(Str::from("c"), 3);
|
||||
assert_eq!(dict.len(), 3);
|
||||
assert_eq!(dict.get(&Str::from("a")), Some(&1));
|
||||
assert_eq!(dict.get(&Str::from("b")), Some(&2));
|
||||
assert_eq!(dict.get(&Str::from("c")), Some(&3));
|
||||
assert_eq!(dict.get(&Str::from("d")), None);
|
||||
assert_eq!(dict.get("a"), Some(&1));
|
||||
assert_eq!(dict.get("b"), Some(&2));
|
||||
assert_eq!(dict.get("c"), Some(&3));
|
||||
assert_eq!(dict.get("d"), None);
|
||||
assert_eq!(dict.remove(&Str::from("a")), Some(1));
|
||||
assert_eq!(dict.remove(&Str::from("a")), None);
|
||||
assert_eq!(dict.len(), 2);
|
||||
assert_eq!(dict.get(&Str::from("a")), None);
|
||||
assert_eq!(dict.get(&Str::from("b")), Some(&2));
|
||||
assert_eq!(dict.get(&Str::from("c")), Some(&3));
|
||||
assert_eq!(dict.get(&Str::from("d")), None);
|
||||
dict.clear();
|
||||
assert_eq!(dict.len(), 0);
|
||||
assert_eq!(dict.get(&Str::from("a")), None);
|
||||
assert_eq!(dict.get(&Str::from("b")), None);
|
||||
assert_eq!(dict.get(&Str::from("c")), None);
|
||||
assert_eq!(dict.get(&Str::from("d")), None);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3835,13 +3835,13 @@ impl Immutable for VarName {}
|
|||
|
||||
impl PartialEq for VarName {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
self.0 == other.0
|
||||
self.0.content == other.0.content
|
||||
}
|
||||
}
|
||||
|
||||
impl std::hash::Hash for VarName {
|
||||
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
||||
self.0.hash(state)
|
||||
self.0.content.hash(state)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6310,3 +6310,26 @@ impl InlineModule {
|
|||
Self { input, ast, import }
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
use erg_common::dict::Dict;
|
||||
|
||||
#[test]
|
||||
fn test_dict() {
|
||||
let mut dict = Dict::new();
|
||||
let a = Token::new(TokenKind::Symbol, "a", 1, 1);
|
||||
let a = VarName::new(a);
|
||||
let a2 = Token::new(TokenKind::Symbol, "a", 2, 3);
|
||||
let a2 = VarName::new(a2);
|
||||
dict.insert(a.clone(), 1);
|
||||
assert_eq!(dict.len(), 1);
|
||||
assert_eq!(dict.get(&a2), Some(&1));
|
||||
assert_eq!(dict.get("a"), Some(&1));
|
||||
assert_eq!(dict.get(&Str::from("a")), Some(&1));
|
||||
assert_eq!(dict.remove(&a2), Some(1));
|
||||
assert_eq!(dict.remove(&a2), None);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue