|  | // 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(var 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; //# 01: compile-time error | 
|  | } |