summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2020-06-16 21:42:50 +1000
committerDamien George <damien@micropython.org>2020-06-16 22:06:30 +1000
commite0fe8ea644b54406ca82cefdc73c98cc2e9cbe9f (patch)
tree2adae065edca516ca901c7fb24d5cd48978becc4
parent2c5993c59e083d11ba8b85e82eeea9c5020ac553 (diff)
tests/basics: Add tests for assignment operator :=.
-rw-r--r--tests/basics/assign_expr.py29
-rw-r--r--tests/basics/assign_expr.py.exp14
-rw-r--r--tests/basics/assign_expr_syntaxerror.py16
-rw-r--r--tests/basics/assign_expr_syntaxerror.py.exp6
4 files changed, 65 insertions, 0 deletions
diff --git a/tests/basics/assign_expr.py b/tests/basics/assign_expr.py
new file mode 100644
index 000000000..f243905dc
--- /dev/null
+++ b/tests/basics/assign_expr.py
@@ -0,0 +1,29 @@
+(x := 4)
+print(x)
+
+if x := 2:
+ print(True)
+print(x)
+
+print(4, x := 5)
+print(x)
+
+x = 1
+print(x, x := 5, x)
+print(x)
+
+
+def foo():
+ print("any", any((hit := i) % 5 == 3 and (hit % 2) == 0 for i in range(10)))
+ return hit
+
+
+hit = 123
+print(foo())
+print(hit) # shouldn't be changed by foo
+
+print("any", any((hit := i) % 5 == 3 and (hit % 2) == 0 for i in range(10)))
+print(hit) # should be changed by above
+
+print([((m := k + 1), k * m) for k in range(4)])
+print(m)
diff --git a/tests/basics/assign_expr.py.exp b/tests/basics/assign_expr.py.exp
new file mode 100644
index 000000000..e38e1ae7a
--- /dev/null
+++ b/tests/basics/assign_expr.py.exp
@@ -0,0 +1,14 @@
+4
+True
+2
+4 5
+5
+1 5 5
+5
+any True
+8
+123
+any True
+8
+[(1, 0), (2, 2), (3, 6), (4, 12)]
+4
diff --git a/tests/basics/assign_expr_syntaxerror.py b/tests/basics/assign_expr_syntaxerror.py
new file mode 100644
index 000000000..11b350129
--- /dev/null
+++ b/tests/basics/assign_expr_syntaxerror.py
@@ -0,0 +1,16 @@
+# test SyntaxError with := operator
+
+def test(code):
+ try:
+ print(eval(code))
+ except SyntaxError:
+ print('SyntaxError')
+
+test("x := 1")
+test("((x, y) := 1)")
+
+# these are currently all allowed in MicroPython, but not in CPython
+test("([i := i + 1 for i in range(4)])")
+test("([i := -1 for i, j in [(1, 2)]])")
+test("([[(i := j) for i in range(2)] for j in range(2)])")
+test("([[(j := i) for i in range(2)] for j in range(2)])")
diff --git a/tests/basics/assign_expr_syntaxerror.py.exp b/tests/basics/assign_expr_syntaxerror.py.exp
new file mode 100644
index 000000000..2ba7d7df8
--- /dev/null
+++ b/tests/basics/assign_expr_syntaxerror.py.exp
@@ -0,0 +1,6 @@
+SyntaxError
+SyntaxError
+[1, 2, 3, 4]
+[-1]
+[[0, 0], [1, 1]]
+[[0, 1], [0, 1]]