##// END OF EJS Templates
win32: work around a WinError problem handling HRESULT types...
win32: work around a WinError problem handling HRESULT types I ran into this ctypes bug while working with the Crypto API. While this could be an issue with any Win32 API in theory, the handful of things that we call are older functions that are unlikely to return COM errors, so I didn't retrofit this everywhere.

File last commit:

r29828:79add5a4 default
r33419:7c33adc8 default
Show More
test-lrucachedict.py
77 lines | 1.9 KiB | text/x-python | PythonLexer
/ tests / test-lrucachedict.py
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'])
assert d.get('a') is None
assert d.get('e') == 've'
# 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()