|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
""" |
|
test dill's ability to handle nested functions |
|
""" |
|
|
|
import os |
|
import math |
|
|
|
import dill as pickle |
|
pickle.settings['recurse'] = True |
|
|
|
|
|
|
|
def adder(augend): |
|
zero = [0] |
|
|
|
def inner(addend): |
|
return addend + augend + zero[0] |
|
return inner |
|
|
|
|
|
|
|
class cadder(object): |
|
def __init__(self, augend): |
|
self.augend = augend |
|
self.zero = [0] |
|
|
|
def __call__(self, addend): |
|
return addend + self.augend + self.zero[0] |
|
|
|
|
|
|
|
class c2adder: |
|
def __init__(self, augend): |
|
self.augend = augend |
|
self.zero = [0] |
|
|
|
def __call__(self, addend): |
|
return addend + self.augend + self.zero[0] |
|
|
|
|
|
|
|
class basic(object): |
|
pass |
|
|
|
|
|
class basic2: |
|
pass |
|
|
|
|
|
x = 5 |
|
y = 1 |
|
|
|
|
|
def test_basic(): |
|
a = [0, 1, 2] |
|
pa = pickle.dumps(a) |
|
pmath = pickle.dumps(math) |
|
pmap = pickle.dumps(map) |
|
|
|
la = pickle.loads(pa) |
|
lmath = pickle.loads(pmath) |
|
lmap = pickle.loads(pmap) |
|
assert list(map(math.sin, a)) == list(lmap(lmath.sin, la)) |
|
|
|
|
|
def test_basic_class(): |
|
pbasic2 = pickle.dumps(basic2) |
|
_pbasic2 = pickle.loads(pbasic2)() |
|
pbasic = pickle.dumps(basic) |
|
_pbasic = pickle.loads(pbasic)() |
|
|
|
|
|
def test_c2adder(): |
|
pc2adder = pickle.dumps(c2adder) |
|
pc2add5 = pickle.loads(pc2adder)(x) |
|
assert pc2add5(y) == x+y |
|
|
|
|
|
def test_pickled_cadder(): |
|
pcadder = pickle.dumps(cadder) |
|
pcadd5 = pickle.loads(pcadder)(x) |
|
assert pcadd5(y) == x+y |
|
|
|
|
|
def test_raw_adder_and_inner(): |
|
add5 = adder(x) |
|
assert add5(y) == x+y |
|
|
|
|
|
def test_pickled_adder(): |
|
padder = pickle.dumps(adder) |
|
padd5 = pickle.loads(padder)(x) |
|
assert padd5(y) == x+y |
|
|
|
|
|
def test_pickled_inner(): |
|
add5 = adder(x) |
|
pinner = pickle.dumps(add5) |
|
p5add = pickle.loads(pinner) |
|
assert p5add(y) == x+y |
|
|
|
|
|
def test_moduledict_where_not_main(): |
|
try: |
|
from . import test_moduledict |
|
except ImportError: |
|
import test_moduledict |
|
name = 'test_moduledict.py' |
|
if os.path.exists(name) and os.path.exists(name+'c'): |
|
os.remove(name+'c') |
|
|
|
if os.path.exists(name) and hasattr(test_moduledict, "__cached__") \ |
|
and os.path.exists(test_moduledict.__cached__): |
|
os.remove(getattr(test_moduledict, "__cached__")) |
|
|
|
if os.path.exists("__pycache__") and not os.listdir("__pycache__"): |
|
os.removedirs("__pycache__") |
|
|
|
|
|
if __name__ == '__main__': |
|
test_basic() |
|
test_basic_class() |
|
test_c2adder() |
|
test_pickled_cadder() |
|
test_raw_adder_and_inner() |
|
test_pickled_adder() |
|
test_pickled_inner() |
|
test_moduledict_where_not_main() |
|
|