sapling/tests/test-lrucachedict.py
Jun Wu 584656dff3 codemod: join the auto-formatter party
Summary:
Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`.
Then run `arc lint` again so some other autofixers like spellchecker etc. looked
at the code base. Manually accept the changes whenever they make sense, or use
a workaround (ex. changing "dict()" to "dict constructor") where autofix is false
positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less
interesting to fix (hgsubversion tests), or cannot be fixed without breaking
OSS build (FBPYTHON4).

Conflicted linters (test-check-module-imports.t, part of test-check-code.t,
test-check-pyflakes.t) are removed or disabled.

Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed.

An issue of the auto-formatter is lines are no longer guarnateed to be <= 80
chars. But that seems less important comparing with the benefit auto-formatter
provides.

As we're here, also remove test-check-py3-compat.t, as it is currently broken
if `PYTHON3=/bin/python3` is set.

Reviewed By: wez, phillco, simpkins, pkaush, singhsrb

Differential Revision: D8173629

fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
2018-05-25 22:17:29 -07:00

79 lines
1.8 KiB
Python

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