| // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| // Dart test program for testing for statement. | |
| import "package:expect/expect.dart"; | |
| class Helper { | |
| static int f1() { | |
| for (;;) return 1; | |
| } | |
| static int f2(n) { | |
| int i = 0; | |
| for (; i < n; i++) ; | |
| return i; | |
| } | |
| static int f3(int n) { | |
| int i = 0; | |
| for (int j = 0; j < n; j++) i = i + j + 1; | |
| return i; | |
| } | |
| static int f4(n) { | |
| int i = 0; | |
| for (bool stop = false; (i < n) && !stop; i++) { | |
| if (i >= 5) { | |
| stop = true; | |
| } | |
| } | |
| return i; | |
| } | |
| static var status; | |
| static void f5() { | |
| status = 0; | |
| for (var stop = false; ;) { | |
| if (stop) { | |
| break; | |
| } else { | |
| stop = true; | |
| continue; | |
| } | |
| } | |
| status = 1; | |
| } | |
| static int f6() { | |
| // Verify that side effects in the condition are visible after the loop. | |
| int i = 0; | |
| for (; ++i < 3;) {} | |
| return i; | |
| } | |
| } | |
| class ForTest { | |
| static testMain() { | |
| Expect.equals(1, Helper.f1()); | |
| Expect.equals(0, Helper.f2(-1)); | |
| Expect.equals(0, Helper.f2(0)); | |
| Expect.equals(10, Helper.f2(10)); | |
| Expect.equals(0, Helper.f3(-1)); | |
| Expect.equals(0, Helper.f3(0)); | |
| Expect.equals(1, Helper.f3(1)); | |
| Expect.equals(3, Helper.f3(2)); | |
| Expect.equals(6, Helper.f3(3)); | |
| Expect.equals(10, Helper.f3(4)); | |
| Expect.equals(0, Helper.f4(-1)); | |
| Expect.equals(0, Helper.f4(0)); | |
| Expect.equals(1, Helper.f4(1)); | |
| Expect.equals(6, Helper.f4(6)); | |
| Expect.equals(6, Helper.f4(10)); | |
| Helper.f5(); | |
| Expect.equals(1, Helper.status); | |
| Expect.equals(3, Helper.f6()); | |
| } | |
| } | |
| main() { | |
| ForTest.testMain(); | |
| testShadowLocal(); | |
| } | |
| void testShadowLocal() { | |
| List<int> x = [1, 2, 3]; | |
| for (var x = x; ;) break; | |
| // ^ | |
| // [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION | |
| // [cfe] Local variable 'x' can't be referenced before it is declared. | |
| } |