#!/usr/bin/env python # # Author: Mike McKerns (mmckerns @caltech and @uqfoundation) # Copyright (c) 2008-2016 California Institute of Technology. # Copyright (c) 2016-2023 The Uncertainty Quantification Foundation. # License: 3-clause BSD. The full license text is available at: # - https://github.com/uqfoundation/dill/blob/master/LICENSE import sys from dill.temp import dump, dump_source, dumpIO, dumpIO_source from dill.temp import load, load_source, loadIO, loadIO_source WINDOWS = sys.platform[:3] == 'win' f = lambda x: x**2 x = [1,2,3,4,5] # source code to tempfile def test_code_to_tempfile(): if not WINDOWS: #see: https://bugs.python.org/issue14243 pyfile = dump_source(f, alias='_f') _f = load_source(pyfile) assert _f(4) == f(4) # source code to stream def test_code_to_stream(): pyfile = dumpIO_source(f, alias='_f') _f = loadIO_source(pyfile) assert _f(4) == f(4) # pickle to tempfile def test_pickle_to_tempfile(): if not WINDOWS: #see: https://bugs.python.org/issue14243 dumpfile = dump(x) _x = load(dumpfile) assert _x == x # pickle to stream def test_pickle_to_stream(): dumpfile = dumpIO(x) _x = loadIO(dumpfile) assert _x == x ### now testing the objects ### f = lambda x: x**2 def g(x): return f(x) - x def h(x): def g(x): return x return g(x) - x class Foo(object): def bar(self, x): return x*x+x _foo = Foo() def add(x,y): return x+y # yes, same as 'f', but things are tricky when it comes to pointers squared = lambda x:x**2 class Bar: pass _bar = Bar() # test function-type objects that take 2 args def test_two_arg_functions(): for obj in [add]: pyfile = dumpIO_source(obj, alias='_obj') _obj = loadIO_source(pyfile) assert _obj(4,2) == obj(4,2) # test function-type objects that take 1 arg def test_one_arg_functions(): for obj in [g, h, squared]: pyfile = dumpIO_source(obj, alias='_obj') _obj = loadIO_source(pyfile) assert _obj(4) == obj(4) # test instance-type objects #for obj in [_bar, _foo]: # pyfile = dumpIO_source(obj, alias='_obj') # _obj = loadIO_source(pyfile) # assert type(_obj) == type(obj) # test the rest of the objects def test_the_rest(): for obj in [Bar, Foo, Foo.bar, _foo.bar]: pyfile = dumpIO_source(obj, alias='_obj') _obj = loadIO_source(pyfile) assert _obj.__name__ == obj.__name__ if __name__ == '__main__': test_code_to_tempfile() test_code_to_stream() test_pickle_to_tempfile() test_pickle_to_stream() test_two_arg_functions() test_one_arg_functions() test_the_rest()
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
__init__.py | File | 501 B | 0644 |
|
__main__.py | File | 899 B | 0644 |
|
test_abc.py | File | 3.75 KB | 0644 |
|
test_check.py | File | 1.36 KB | 0644 |
|
test_classdef.py | File | 6.99 KB | 0644 |
|
test_dataclasses.py | File | 890 B | 0644 |
|
test_detect.py | File | 3.99 KB | 0644 |
|
test_dictviews.py | File | 1.31 KB | 0644 |
|
test_diff.py | File | 2.6 KB | 0644 |
|
test_extendpickle.py | File | 1.28 KB | 0644 |
|
test_fglobals.py | File | 1.64 KB | 0644 |
|
test_file.py | File | 13.26 KB | 0644 |
|
test_functions.py | File | 4.17 KB | 0644 |
|
test_functors.py | File | 930 B | 0644 |
|
test_logger.py | File | 2.33 KB | 0644 |
|
test_mixins.py | File | 3.91 KB | 0644 |
|
test_module.py | File | 1.9 KB | 0644 |
|
test_moduledict.py | File | 1.15 KB | 0644 |
|
test_nested.py | File | 3.07 KB | 0644 |
|
test_objects.py | File | 1.79 KB | 0644 |
|
test_properties.py | File | 1.31 KB | 0644 |
|
test_pycapsule.py | File | 1.38 KB | 0644 |
|
test_recursive.py | File | 4.08 KB | 0644 |
|
test_registered.py | File | 1.54 KB | 0644 |
|
test_restricted.py | File | 783 B | 0644 |
|
test_selected.py | File | 3.14 KB | 0644 |
|
test_session.py | File | 9.92 KB | 0644 |
|
test_source.py | File | 5.89 KB | 0644 |
|
test_temp.py | File | 2.56 KB | 0644 |
|
test_weakref.py | File | 1.56 KB | 0644 |
|