diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2017-11-09 17:06:35 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2017-11-09 17:06:35 +0200 |
commit | 323e774380995c04ae705e29ae0e51d62246333d (patch) | |
tree | 83c18773c1efbfcdb7d3eef77d837880df21dc10 /tests/loop/for.test | |
parent | 3b0df49b8828921edfb7b764b0628fb164dab852 (diff) |
Add support for for-loop
The semantics is similar to the C++11 range-based for:
list = 1 2 3
for i: $list
print $i
Note that there is no scoping of any kind for the loop variable ('i' in
the above example).
See tests/loop/for.test for some examples/ideas.
In the future the plan is to also support more general while-loop as well
as break and continue.
Diffstat (limited to 'tests/loop/for.test')
-rw-r--r-- | tests/loop/for.test | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/tests/loop/for.test b/tests/loop/for.test new file mode 100644 index 0000000..746f1bb --- /dev/null +++ b/tests/loop/for.test @@ -0,0 +1,112 @@ +# file : tests/loop/for.test +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +# Test for-loop. + +.include ../common.test + +: line +: +$* <<EOI >>EOO +for i: 1 2 3 + print $i +EOI +1 +2 +3 +EOO + +: block +: +$* <<EOI >>EOO +for i: 1 2 3 +{ + # This is a block if you haven't noticed. + j = $i + print $j +} +EOI +1 +2 +3 +EOO + +: empty +: +$* <<EOI +i = x +nums = +for i: $nums + print $i +assert ($i == x) +EOI + +: nested +: +$* <<EOI >>EOO +for i: 1 2 3 +{ + for j: + - + { + print $j$i + } +} +EOI ++1 +-1 ++2 +-2 ++3 +-3 +EOO + +: diag-line +: +$* <<EOI 2>>EOE != 0 +for i: true false +{ + assert $i +} +EOI +<stdin>:3:3: error: assertion failed +EOE + +: var-attribute +: +$* <<EOI >>EOO +for [uint64] i: 0 1 2 +{ + i += 1 + print $i +} +EOI +1 +2 +3 +EOO + +: val-attribute +: +$* <<EOI >>EOO +for i: [uint64s] 0 1 2 +{ + i += 1 + print $i +} +EOI +1 +2 +3 +EOO + +: pairs +: +$* <<EOI >>EOO +for i: a@1 b@2 c@3 + print $i +EOI +a@1 +b@2 +c@3 +EOO |