def test_unordered_hash(): import random import hashlib # FIXME: Use randbytes once >=3.9 is OK lst = [ bytes([random.randrange(256) for _ in range(20)]) for _ in range(200) ] lorig = lst[:] random.shuffle(lst) from pytools import unordered_hash assert (unordered_hash(hashlib.sha256(), lorig).digest() == unordered_hash( hashlib.sha256(), lst).digest()) assert (unordered_hash(hashlib.sha256(), lorig).digest() == unordered_hash( hashlib.sha256(), lorig).digest()) assert (unordered_hash(hashlib.sha256(), lorig).digest() != unordered_hash( hashlib.sha256(), lorig[:-1]).digest()) lst[0] = b"aksdjfla;sdfjafd" assert (unordered_hash(hashlib.sha256(), lorig).digest() != unordered_hash( hashlib.sha256(), lst).digest())
def update_for_dict(self, key_hash, key): from pytools import unordered_hash unordered_hash( key_hash, (self.rec(self.new_hash(), (k, v)).digest() for k, v in key.items()))
def update_for_frozenset(self, key_hash, key): from pytools import unordered_hash unordered_hash(key_hash, (self.rec(self.new_hash(), key_i).digest() for key_i in key))