import random from valuetree import * from test_hashtable import udir def test_int_valuetree(iterations=10000, keymaker=lambda: random.randrange(1, 99999)): fn = str(udir.join('tree1-%s' % random.random())) expected = {} t = ValueTree(fn, "ii") for i in range(iterations): key = keymaker() values = ( random.randrange(-sys.maxint, sys.maxint), random.randrange(-sys.maxint, sys.maxint), ) expected[key] = values t[key] = values for key, values in expected.items(): got = t[key] assert got == values t.close() t = ValueTree(fn, "ii") for key, values in expected.items(): got = t[key] assert got == values t.close() return fn, expected def test_float_valuetrees(): for n in range(500, 10000, 2869): #500): yield test_int_valuetree, n, random.random def test_iteritems(): fn, expected = test_int_valuetree(1000) expecteditems = expected.items() expecteditems.sort() t = ValueTree(fn, "ii") items = list(t.iteritems()) assert items == expecteditems expecteditems.reverse() items = list(t.iteritems(reverse=True)) assert items == expecteditems def test_iteritemsfrom(): fn, expected = test_int_valuetree(1000) expecteditems = expected.items() expecteditems.sort() t = ValueTree(fn, "ii") for reverse in [False, True]: if reverse: delta = -1 else: delta = +1 for n in [0, 1, 2, 6, 64, len(expecteditems)//2, -64, -6, -3, -2, -1]: if n < 0: n += len(expecteditems) key, _ = expecteditems[n] items = list(t.iteritemsfrom(key, reverse=reverse)) assert items == expecteditems[n:] items = list(t.iteritemsfrom(key-delta, included=False, reverse=reverse)) assert items == expecteditems[n:] items = list(t.iteritemsfrom(key, included=False, reverse=reverse)) assert items == expecteditems[n+1:] items = list(t.iteritemsfrom(key+delta, reverse=reverse)) assert items == expecteditems[n+1:] expecteditems.reverse()