mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 07:17:55 +03:00
584656dff3
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
79 lines
1.8 KiB
Python
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()
|