// $G $D/$F.go && $L $F.$A && ./$A.out

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

func assertequal(is, shouldbe int, msg string) {
	if is != shouldbe {
		print("assertion fail" + msg + "\n");
		panic(1);
	}
}

func main() {
	var i, sum int;

	i = 0;
	for {
		i = i + 1;
		if i > 5 {
			break;
		}
	}
	assertequal(i, 6, "break");

	sum = 0;
	for i := 0; i <= 10; i++ {
		sum = sum + i;
	}
	assertequal(sum, 55, "all three");

	sum = 0;
	for i := 0; i <= 10; {
		sum = sum + i;
		i++;
	}
	assertequal(sum, 55, "only two");

	sum = 0;
	for sum < 100 {
		sum = sum + 9;
	}
	assertequal(sum, 99 + 9, "only one");

	sum = 0;
	for i := 0; i <= 10; i++ {
		if i % 2 == 0 {
			continue;
		}
		sum = sum + i;
	}
	assertequal(sum, 1+3+5+7+9, "continue");

}
