test_pickling.py revision 12037
112037Sandreas.sandberg@arm.comimport pytest 212037Sandreas.sandberg@arm.com 311986Sandreas.sandberg@arm.comtry: 411986Sandreas.sandberg@arm.com import cPickle as pickle # Use cPickle on Python 2.7 511986Sandreas.sandberg@arm.comexcept ImportError: 611986Sandreas.sandberg@arm.com import pickle 711986Sandreas.sandberg@arm.com 811986Sandreas.sandberg@arm.com 911986Sandreas.sandberg@arm.comdef test_roundtrip(): 1011986Sandreas.sandberg@arm.com from pybind11_tests import Pickleable 1111986Sandreas.sandberg@arm.com 1211986Sandreas.sandberg@arm.com p = Pickleable("test_value") 1311986Sandreas.sandberg@arm.com p.setExtra1(15) 1411986Sandreas.sandberg@arm.com p.setExtra2(48) 1511986Sandreas.sandberg@arm.com 1611986Sandreas.sandberg@arm.com data = pickle.dumps(p, 2) # Must use pickle protocol >= 2 1711986Sandreas.sandberg@arm.com p2 = pickle.loads(data) 1811986Sandreas.sandberg@arm.com assert p2.value() == p.value() 1911986Sandreas.sandberg@arm.com assert p2.extra1() == p.extra1() 2011986Sandreas.sandberg@arm.com assert p2.extra2() == p.extra2() 2111986Sandreas.sandberg@arm.com 2211986Sandreas.sandberg@arm.com 2312037Sandreas.sandberg@arm.com@pytest.unsupported_on_pypy 2411986Sandreas.sandberg@arm.comdef test_roundtrip_with_dict(): 2511986Sandreas.sandberg@arm.com from pybind11_tests import PickleableWithDict 2611986Sandreas.sandberg@arm.com 2711986Sandreas.sandberg@arm.com p = PickleableWithDict("test_value") 2811986Sandreas.sandberg@arm.com p.extra = 15 2911986Sandreas.sandberg@arm.com p.dynamic = "Attribute" 3011986Sandreas.sandberg@arm.com 3111986Sandreas.sandberg@arm.com data = pickle.dumps(p, pickle.HIGHEST_PROTOCOL) 3211986Sandreas.sandberg@arm.com p2 = pickle.loads(data) 3311986Sandreas.sandberg@arm.com assert p2.value == p.value 3411986Sandreas.sandberg@arm.com assert p2.extra == p.extra 3511986Sandreas.sandberg@arm.com assert p2.dynamic == p.dynamic 36