def test_collision(): HASH = 13465345 mp = PersistentTreeMap() mp = mp.assoc(HashCollision("hello", HASH), "world") mp = mp.assoc(HashCollision("answer", HASH), 42) assert mp[HashCollision("hello", HASH)] == "world" assert mp[HashCollision("answer", HASH)] == 42
def test_novaluecopy(): mp = PersistentTreeMap() bar = [] mp = mp.assoc("foo", bar) mv = mp.transient() bar.append("test") assert mp["foo"] == mv["foo"] == bar
def test_persistence(): mp = PersistentTreeMap() mp1 = mp.assoc('a', 'hello') assert mp1['a'] == 'hello' mp2 = mp1.assoc('b', 'world') assert mp2['a'] == 'hello' assert mp2['b'] == 'world' mp3 = mp2.without('a') assert mp3['b'] == 'world' excinfo = pytest.raises(KeyError, lambda: mp3['a']) assert excinfo.value.args[0] == 'a'
def main(): import os import time mp = PersistentTreeMap().transient() for _ in xrange(22500): one, other = os.urandom(20), os.urandom(25) mp2 = mp.assoc(one, other) assert mp[one] == other assert mp2[one] == other mp = mp2 pmp = mp.persistent() s = time.time() mp = PersistentTreeMap() for _ in xrange(225000): one, other = os.urandom(20), os.urandom(25) mp2 = mp.assoc(one, other) try: mp[one] except KeyError: assert True else: assert False try: mp2.without(one)[one] except KeyError: assert True else: assert False mp = mp2 assert mp[one] == other print 'PersistentHashMap:', time.time() - s assert mp[one] == other # This /may/ actually fail if we are unlucky, but it's a good start. assert len(list(iter(mp))) == 225000