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