summaryrefslogtreecommitdiffstatshomepage
path: root/tests/basics/op_precedence.py
diff options
context:
space:
mode:
authorKrzysztof Blazewicz <blazewicz.krzysztof@gmail.com>2017-04-27 21:33:15 +0200
committerDamien George <damien.p.george@gmail.com>2017-07-05 15:51:03 +1000
commit7feb7301b2cefd568fa65ee9907a1a179ea41f1c (patch)
treef205066834eb61a0c184d76919c3d3b64b4980ec /tests/basics/op_precedence.py
parent91a385db98711c2a9115ad661cb4d637450d7ee2 (diff)
downloadmicropython-7feb7301b2cefd568fa65ee9907a1a179ea41f1c.tar.gz
micropython-7feb7301b2cefd568fa65ee9907a1a179ea41f1c.zip
tests/basics: Add tests for arithmetic operators precedence.
Diffstat (limited to 'tests/basics/op_precedence.py')
-rw-r--r--tests/basics/op_precedence.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/basics/op_precedence.py b/tests/basics/op_precedence.py
new file mode 100644
index 0000000000..519a2a1137
--- /dev/null
+++ b/tests/basics/op_precedence.py
@@ -0,0 +1,43 @@
+# see https://docs.python.org/3/reference/expressions.html#operator-precedence
+
+# '|' is the least binding numeric operator
+
+# '^'
+# OK: 1 | (2 ^ 3) = 1 | 1 = 1
+# BAD: (1 | 2) ^ 3 = 3 ^ 3 = 0
+print(1 | 2 ^ 3)
+
+# '&'
+# OK: 3 ^ (2 & 1) = 3 ^ 0 = 3
+# BAD: (3 ^ 2) & 1 = 1 & 1 = 1
+print(3 ^ 2 & 1)
+
+# '<<', '>>'
+# OK: 2 & (3 << 1) = 2 & 6 = 2
+# BAD: (2 & 3) << 1 = 2 << 1 = 4
+print(2 & 3 << 1)
+# OK: 6 & (4 >> 1) = 6 & 2 = 2
+# BAD: (6 & 4) >> 1 = 2 >> 1 = 1
+print(6 & 4 >> 1)
+
+# '+', '-'
+# OK: 1 << (1 + 1) = 1 << 2 = 4
+# BAD: (1 << 1) + 1 = 2 + 1 = 3
+print(1 << 1 + 1)
+
+# '*', '/', '//', '%'
+# OK: 2 + (2 * 2) = 2 + 4 = 6
+# BAD: (2 + 2) * 2 = 4 * 2 = 8
+print(2 + 2 * 2)
+
+# '+x', '-x', '~x'
+
+# '**'
+# OK: -(2**2) = -4
+# BAD: (-2)**2 = 4
+print(-2**2)
+# OK: 2**(-1) = 0.5
+print(2**-1)
+
+# (expr...)
+print((2 + 2) * 2)