view tests/test-lrucachedict.py @ 29817:cc11079644fc

templater: make pad() evaluate boolean argument (BC) Otherwise it would crash if template expression was passed. This patch unifies the way how boolean expression is evaluated, which involves BC. Before "if(true)" and "pad(..., 'false')" were False, which are now True since they are boolean literal and non-empty string respectively. "func is runsymbol" is the same hack as evalstringliteral(), which is needed for label() to take color literals.
author Yuya Nishihara <yuya@tcha.org>
date Fri, 22 Apr 2016 21:29:13 +0900
parents ba0e4789bd2e
children 79add5a4e857
line wrap: on
line source

from __future__ import absolute_import, print_function

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()