tests/test-lrucachedict.py
author Yuya Nishihara <yuya@tcha.org>
Wed, 20 Jan 2016 00:08:00 +0900
branchstable
changeset 27915 5f2a308bac94
parent 27576 6cd3044985c2
child 28930 e3f01188d439
permissions -rw-r--r--
commandserver: drop tell() and seek() from channels (issue5049) These operations are obviously invalid for file-like channels because they will read or write protocol headers. This patch works around the issue that "hg archive" generates a corrupted zip file on Windows commandserver because of unusable tell() implementation. But the problem still occurs without using a commandserver. $ hg archive -R not-small-repo -t zip - | cat > invalid.zip So, this patch cannot fix the issue5049 completely.

from mercurial import util

def printifpresent(d, xs, name='d'):
    for x in xs:
        present = x in d
        print "'%s' in %s: %s" % (x, name, present)
        if present:
            print "%s['%s']: %s" % (name, x, d[x])

def test_lrucachedict():
    d = util.lrucachedict(4)
    d['a'] = 'va'
    d['b'] = 'vb'
    d['c'] = 'vc'
    d['d'] = 'vd'

    # all of these should be present
    printifpresent(d, ['a', 'b', 'c', 'd'])

    # 'a' should be dropped because it was least recently used
    d['e'] = 've'
    printifpresent(d, ['a', 'b', 'c', 'd', 'e'])

    # touch entries in some order (get or set).
    d['e']
    d['c'] = 'vc2'
    d['d']
    d['b'] = 'vb2'

    # 'e' should be dropped now
    d['f'] = 'vf'
    printifpresent(d, ['b', 'c', 'd', 'e', 'f'])

    d.clear()
    printifpresent(d, ['b', 'c', 'd', 'e', 'f'])

    # Now test dicts that aren't full.
    d = util.lrucachedict(4)
    d['a'] = 1
    d['b'] = 2
    d['a']
    d['b']
    printifpresent(d, ['a', 'b'])

    # test copy method
    d = util.lrucachedict(4)
    d['a'] = 'va3'
    d['b'] = 'vb3'
    d['c'] = 'vc3'
    d['d'] = 'vd3'

    dc = d.copy()

    # all of these should be present
    print "\nAll of these should be present:"
    printifpresent(dc, ['a', 'b', 'c', 'd'], 'dc')

    # 'a' should be dropped because it was least recently used
    print "\nAll of these except 'a' should be present:"
    dc['e'] = 've3'
    printifpresent(dc, ['a', 'b', 'c', 'd', 'e'], 'dc')

    # contents and order of original dict should remain unchanged
    print "\nThese should be in reverse alphabetical order and read 'v?3':"
    dc['b'] = 'vb3_new'
    for k in list(iter(d)):
        print "d['%s']: %s" % (k, d[k])

if __name__ == '__main__':
    test_lrucachedict()