tests/test-lrucachedict.py
author Lucas Moscovicz <lmoscovicz@fb.com>
Tue, 11 Mar 2014 17:09:23 -0700
changeset 20725 cf628b50afbb
parent 19710 887ffa22fd0d
child 27371 45d996a566d7
permissions -rw-r--r--
revset: added isascending and isdescending methods to smartset classes This methods state if the class is sorted in an ascending or descending order We need this to implement methods based on order on smartset classes in order to be able to create new objects with a given order. We cannot just rely on a simple boolean since unordered set are neither ascending nor descending.

from mercurial import util

def printifpresent(d, xs):
    for x in xs:
        present = x in d
        print "'%s' in d: %s" % (x, present)
        if present:
            print "d['%s']: %s" % (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'])

if __name__ == '__main__':
    test_lrucachedict()