summaryrefslogtreecommitdiffstatshomepage
path: root/tests/basics/int_constfolding.py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2015-10-08 13:02:00 +0100
committerDamien George <damien.p.george@gmail.com>2015-10-08 13:02:00 +0100
commit7e12a601b8e9d90e5a7498523a9023c8c47bc4ca (patch)
tree12f14c1241de3b889746cb12bbd142beb4aa2bb6 /tests/basics/int_constfolding.py
parent2a8d7ee0f89b43fb2e65452343891897837f8231 (diff)
downloadmicropython-7e12a601b8e9d90e5a7498523a9023c8c47bc4ca.tar.gz
micropython-7e12a601b8e9d90e5a7498523a9023c8c47bc4ca.zip
py/compile: Fix edge case when constant-folding negation of integer.
Also adds tests specifically for testing constant folding.
Diffstat (limited to 'tests/basics/int_constfolding.py')
-rw-r--r--tests/basics/int_constfolding.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/basics/int_constfolding.py b/tests/basics/int_constfolding.py
new file mode 100644
index 0000000000..c01f964daa
--- /dev/null
+++ b/tests/basics/int_constfolding.py
@@ -0,0 +1,40 @@
+# tests int constant folding in compiler
+
+# positive
+print(+1)
+print(+100)
+
+# negation
+print(-1)
+print(-(-1))
+print(-0x3fffffff) # 32-bit edge case
+print(-0x3fffffffffffffff) # 64-bit edge case
+print(-(-0x3fffffff - 1)) # 32-bit edge case
+print(-(-0x3fffffffffffffff - 1)) # 64-bit edge case
+
+# 1's complement
+print(~0)
+print(~1)
+print(~-1)
+print(~0x3fffffff) # 32-bit edge case
+print(~0x3fffffffffffffff) # 64-bit edge case
+print(~(-0x3fffffff - 1)) # 32-bit edge case
+print(~(-0x3fffffffffffffff - 1)) # 64-bit edge case
+
+# addition
+print(1 + 2)
+
+# subtraction
+print(1 - 2)
+print(2 - 1)
+
+# multiplication
+print(1 * 2)
+print(123 * 456)
+
+# floor div and modulo
+print(123 // 7, 123 % 7)
+print(-123 // 7, -123 % 7)
+print(123 // -7, 123 % -7)
+print(-123 // -7, -123 % -7)
+