about summary refs log tree commit diff stats
path: root/test/expression/expr_pickle.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/expression/expr_pickle.py')
-rw-r--r--test/expression/expr_pickle.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/test/expression/expr_pickle.py b/test/expression/expr_pickle.py
new file mode 100644
index 00000000..84ad0b9f
--- /dev/null
+++ b/test/expression/expr_pickle.py
@@ -0,0 +1,66 @@
+import pickle
+from miasm2.expression.expression import ExprInt, ExprAff, ExprId, \
+    Expr, ExprCompose, ExprMem
+
+
+a = ExprId("test", 8)
+b = ExprInt(1338, 8)
+c = a + b
+d = ExprCompose(a, b)
+e = ExprMem(a, 32)
+f = a[:8]
+aff = ExprAff(a, b)
+
+
+print 'Pickling'
+out = pickle.dumps((a, b, c, d, e, f, aff))
+print 'Unpickling'
+new_a, new_b, new_c, new_d, new_e, new_f, new_aff = pickle.loads(out)
+print 'Result'
+print a, b, c, aff
+print id(a), id(b), id(c), id(d), id(e), id(f), id(aff)
+print new_a, new_b, new_c, new_d, new_e, new_f, new_aff
+print id(new_a), id(new_b), id(new_c), id(new_d), id(new_e), id(new_f), id(new_aff)
+
+assert a == new_a
+assert b == new_b
+assert c == new_c
+assert d == new_d
+assert e == new_e
+assert f == new_f
+assert aff == new_aff
+assert new_a + new_b == a + b
+
+
+assert a is new_a
+assert b is new_b
+assert c is new_c
+assert d is new_d
+assert e is new_e
+assert f is new_f
+assert aff is new_aff
+assert new_a + new_b is a + b
+
+Expr.use_singleton = False
+
+new_a, new_b, new_c, new_d, new_e, new_f, new_aff = pickle.loads(out)
+
+
+assert a is not new_a
+assert b is not new_b
+assert c is not new_c
+assert d is not new_d
+assert e is not new_e
+assert f is not new_f
+assert aff is not new_aff
+assert new_a + new_b is not a + b
+
+
+assert a == new_a
+assert b == new_b
+assert c == new_c
+assert d == new_d
+assert e == new_e
+assert f == new_f
+assert aff == new_aff
+assert new_a + new_b == a + b