diff --git a/src/algorithm/map.rs b/src/algorithm/map.rs index cb627e429..cc595f88a 100644 --- a/src/algorithm/map.rs +++ b/src/algorithm/map.rs @@ -66,9 +66,9 @@ pub const EMPTY_NAN: f64 = pub const TOMBSTONE_NAN: f64 = unsafe { std::mem::transmute(0x7ff8_0000_0000_0000u64 | 0x0000_0000_0000_0002) }; -fn hash_start(value: &T, capacity: usize) -> usize { +fn hash_start(arr: &Array, capacity: usize) -> usize { let mut hasher = DefaultHasher::new(); - value.hash(&mut hasher); + arr.hash(&mut hasher); hasher.finish() as usize % capacity } @@ -319,7 +319,13 @@ impl<'a> Pair<'a> { self.keys.row_count() } fn hash_start(&self, key: &Value) -> usize { - hash_start(key, self.capacity()) + key.generic_ref_shallow( + |arr| hash_start(arr, self.capacity()), + |arr| hash_start(arr, self.capacity()), + |arr| hash_start(arr, self.capacity()), + |arr| hash_start(arr, self.capacity()), + |arr| hash_start(arr, self.capacity()), + ) } fn get(&self, key: &Value) -> Option { if self.keys.shape() == [0] { diff --git a/tests/units.ua b/tests/units.ua index 6c1aef5fc..01ba2e5c3 100644 --- a/tests/units.ua +++ b/tests/units.ua @@ -343,3 +343,5 @@ Maps ← ∩(remove 1) Maps ∩(⍤. has 3) Maps ∩(⍤. has "hi") Maps ∩(⍤. has [1 2 3]) Maps + +⍤⊃⋅∘≍ [2 3 4 1] ≡(get)[2 3 4 5]¤ ∧(insert) [5 2 3 4] [1 2 3 4] {}