about summary refs log tree commit diff stats
path: root/test/expression/expr_cmp.py
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2017-09-01 16:14:55 +0200
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2017-09-04 22:42:52 +0200
commit73a4d9dc920fcc29de50b776b2b263bfc12c89c1 (patch)
tree1cc2dbc0170413dd10f88a7e9d4c6d1616e7616b /test/expression/expr_cmp.py
parentbeea113aee54ead67890811a4d4a780a4dbc2ba9 (diff)
downloadmiasm-73a4d9dc920fcc29de50b776b2b263bfc12c89c1.tar.gz
miasm-73a4d9dc920fcc29de50b776b2b263bfc12c89c1.zip
Expression: add expression comparison generators
Diffstat (limited to 'test/expression/expr_cmp.py')
-rw-r--r--test/expression/expr_cmp.py107
1 files changed, 107 insertions, 0 deletions
diff --git a/test/expression/expr_cmp.py b/test/expression/expr_cmp.py
new file mode 100644
index 00000000..b238151d
--- /dev/null
+++ b/test/expression/expr_cmp.py
@@ -0,0 +1,107 @@
+#
+# Expression comparison regression tests  #
+#
+from pdb import pm
+from miasm2.expression.expression import ExprInt, expr_is_unsigned_greater,\
+    expr_is_unsigned_greater_or_equal, expr_is_unsigned_lower,\
+    expr_is_unsigned_lower_or_equal, expr_is_signed_greater,\
+    expr_is_signed_greater_or_equal, expr_is_signed_lower, \
+    expr_is_signed_lower_or_equal, expr_is_equal, expr_is_not_equal
+from miasm2.expression.simplifications import expr_simp
+
+int_0 = ExprInt(0, 32)
+int_1 = ExprInt(1, 32)
+int_m1 = ExprInt(-1, 32)
+int_m2 = ExprInt(-2, 32)
+
+b0 = ExprInt(0, 1)
+b1 = ExprInt(1, 1)
+
+tests = [
+    # unsigned
+    (b1, expr_is_unsigned_greater, int_1, int_0),
+    (b1, expr_is_unsigned_lower, int_0, int_1),
+
+    (b0, expr_is_unsigned_greater, int_0, int_1),
+    (b0, expr_is_unsigned_lower, int_1, int_0),
+
+    (b1, expr_is_unsigned_greater_or_equal, int_1, int_0),
+    (b1, expr_is_unsigned_lower_or_equal, int_0, int_1),
+
+    (b0, expr_is_unsigned_greater_or_equal, int_0, int_1),
+    (b0, expr_is_unsigned_lower_or_equal, int_1, int_0),
+
+    (b1, expr_is_unsigned_greater_or_equal, int_1, int_1),
+    (b1, expr_is_unsigned_lower_or_equal, int_1, int_1),
+
+    (b1, expr_is_unsigned_greater, int_m1, int_0),
+    (b1, expr_is_unsigned_lower, int_0, int_m1),
+
+    (b0, expr_is_unsigned_greater, int_0, int_m1),
+    (b0, expr_is_unsigned_lower, int_m1, int_0),
+
+
+    # signed
+    (b1, expr_is_signed_greater, int_1, int_0),
+    (b1, expr_is_signed_lower, int_0, int_1),
+
+    (b0, expr_is_signed_greater, int_0, int_1),
+    (b0, expr_is_signed_lower, int_1, int_0),
+
+    (b1, expr_is_signed_greater_or_equal, int_1, int_0),
+    (b1, expr_is_signed_lower_or_equal, int_0, int_1),
+
+    (b0, expr_is_signed_greater_or_equal, int_0, int_1),
+    (b0, expr_is_signed_lower_or_equal, int_1, int_0),
+
+    (b1, expr_is_signed_greater_or_equal, int_1, int_1),
+    (b1, expr_is_signed_lower_or_equal, int_1, int_1),
+
+    (b0, expr_is_signed_greater, int_m1, int_0),
+    (b0, expr_is_signed_lower, int_0, int_m1),
+
+    (b1, expr_is_signed_greater, int_0, int_m1),
+    (b1, expr_is_signed_lower, int_m1, int_0),
+
+
+    # greater lesser, neg
+    (b1, expr_is_signed_greater, int_1, int_m1),
+    (b1, expr_is_signed_lower, int_m1, int_1),
+
+    (b0, expr_is_signed_greater, int_m1, int_1),
+    (b0, expr_is_signed_lower, int_1, int_m1),
+
+    (b1, expr_is_signed_greater_or_equal, int_1, int_m1),
+    (b1, expr_is_signed_lower_or_equal, int_m1, int_1),
+
+    (b0, expr_is_signed_greater_or_equal, int_m1, int_1),
+    (b0, expr_is_signed_lower_or_equal, int_1, int_m1),
+
+    (b1, expr_is_signed_greater_or_equal, int_m1, int_m1),
+    (b1, expr_is_signed_lower_or_equal, int_m1, int_m1),
+
+
+    (b1, expr_is_signed_greater, int_m1, int_m2),
+    (b1, expr_is_signed_lower, int_m2, int_m1),
+
+    (b0, expr_is_signed_greater, int_m2, int_m1),
+    (b0, expr_is_signed_lower, int_m1, int_m2),
+
+    (b1, expr_is_signed_greater_or_equal, int_m1, int_m2),
+    (b1, expr_is_signed_lower_or_equal, int_m2, int_m1),
+
+    (b0, expr_is_signed_greater_or_equal, int_m2, int_m1),
+    (b0, expr_is_signed_lower_or_equal, int_m1, int_m2),
+
+    # eq/neq
+    (b1, expr_is_equal, int_1, int_1),
+    (b1, expr_is_not_equal, int_0, int_1),
+
+    (b0, expr_is_equal, int_1, int_0),
+    (b0, expr_is_not_equal, int_0, int_0),
+
+
+]
+
+for result, func, arg1, arg2 in tests:
+    assert result == expr_simp(func(arg1, arg2))