// $G $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() {
	i5 := 5;
	i7 := 7;

	var count int;

	count = 0;
	if true {
		count = count + 1;
	}
	assertequal(count, 1, "if true");

	count = 0;
	if false {
		count = count + 1;
	}
	assertequal(count, 0, "if false");

	count = 0;
	if one := 1; true {
		count = count + one;
	}
	assertequal(count, 1, "if true one");

	count = 0;
	if one := 1; false {
		count = count + 1;
		_ = one;
	}
	assertequal(count, 0, "if false one");

	count = 0;
	if {
		count = count + 1;
	}
	assertequal(count, 1, "if empty");

	count = 0;
	if one := 1; true {
		count = count + one;
	}
	assertequal(count, 1, "if empty one");

	count = 0;
	if i5 < i7 {
		count = count + 1;
	}
	assertequal(count, 1, "if cond");

	count = 0;
	if true {
		count = count + 1;
	} else
		count = count - 1;
	assertequal(count, 1, "if else true");

	count = 0;
	if false {
		count = count + 1;
	} else
		count = count - 1;
	assertequal(count, -1, "if else false");

	count = 0;
	if t:=1; false {
		count = count + 1;
		_ = t;
		t := 7;
		_ = t;
	} else
		count = count - t;
	assertequal(count, -1, "if else false var");

	count = 0;
	t := 1;
	if false {
		count = count + 1;
		t := 7;
		_ = t;
	} else
		count = count - t;
	_ = t;
	assertequal(count, -1, "if else false var outside");
}
