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