File: C:/Users/fred/anaconda3/Lib/site-packages/zict/tests/test_func.py
import gc
from collections.abc import MutableMapping
import pytest
from zict import Func
from zict.common import ZictBase
from zict.tests import utils_test
def inc(x):
return x + 1
def dec(x):
return x - 1
def rotl(x):
return x[1:] + x[:1]
def rotr(x):
return x[-1:] + x[:-1]
def test_simple():
d = {}
f = Func(inc, dec, d)
f["x"] = 10
assert f["x"] == 10
assert d["x"] == 11
assert "x" in f
assert list(f) == ["x"]
assert list(f.values()) == [10]
assert list(f.items()) == [("x", 10)]
assert all(s in str(f) for s in ["inc", "dec", "x", "Func"])
assert all(s in repr(f) for s in ["inc", "dec", "x", "Func"])
del f["x"]
assert "x" not in d
def test_mapping():
"""
Test mapping interface for Func().
"""
d = {}
z = Func(rotl, rotr, d)
utils_test.check_mapping(z)
utils_test.check_closing(z)
@pytest.mark.parametrize("wrapped_cls", [MutableMapping, ZictBase])
def test_update_descopes_early(wrapped_cls):
"""Test that Func.update() descopes the output of self.dump as soon as it can, if
the wrapped mapping allows, and doesn't store everything into a list.
"""
class Dumped:
n = 0
def __init__(self):
gc.collect() # Only necessary on pypy
Dumped.n += 1
assert Dumped.n < 3
def __del__(self):
Dumped.n -= 1
class Dummy(wrapped_cls):
def __setitem__(self, key, value):
pass
def __getitem__(self, key, value):
raise KeyError(key)
def __delitem__(self, key):
raise KeyError(key)
def __iter__(self):
return iter(())
def __len__(self):
return 0
d = Func(lambda v: Dumped(), lambda w: None, Dummy())
d.update(dict.fromkeys(range(10)))