Spaces:
Sleeping
Sleeping
File size: 907 Bytes
287a0bc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
from chromadb.utils.rendezvous_hash import assign, murmur3hasher
def test_rendezvous_hash() -> None:
# Tests the assign works as expected
members = ["a", "b", "c"]
key = "key"
def mock_hasher(member: str, key: str) -> int:
return members.index(member) # Highest index wins
assert assign(key, members, mock_hasher) == "c"
def test_even_distribution() -> None:
member_count = 10
tolerance = 25
nodes = [str(i) for i in range(member_count)]
# Test if keys are evenly distributed across nodes
key_distribution = {node: 0 for node in nodes}
num_keys = 1000
for i in range(num_keys):
key = f"key_{i}"
node = assign(key, nodes, murmur3hasher)
key_distribution[node] += 1
# Check if keys are somewhat evenly distributed
for node in nodes:
assert abs(key_distribution[node] - num_keys / len(nodes)) < tolerance
|