blob: 25cc141648b9a65b7555075ad947b1035ad3111d [file] [log] [blame]
Russ Coxd2cc9882012-02-16 23:50:37 -05001// run
Rob Pike126150d2008-06-06 13:28:03 -07002
3// Copyright 2009 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
Rob Pike501f0b52012-02-23 18:47:26 +11007// Test if statements in various forms.
8
Rob Pike126150d2008-06-06 13:28:03 -07009package main
10
11func assertequal(is, shouldbe int, msg string) {
12 if is != shouldbe {
Rob Pike4f61fc92010-09-04 10:36:13 +100013 print("assertion fail", msg, "\n")
14 panic(1)
Rob Pike126150d2008-06-06 13:28:03 -070015 }
16}
17
18func main() {
Rob Pike4f61fc92010-09-04 10:36:13 +100019 i5 := 5
20 i7 := 7
Rob Pike126150d2008-06-06 13:28:03 -070021
Rob Pike4f61fc92010-09-04 10:36:13 +100022 var count int
Rob Pike126150d2008-06-06 13:28:03 -070023
Rob Pike4f61fc92010-09-04 10:36:13 +100024 count = 0
Rob Pike126150d2008-06-06 13:28:03 -070025 if true {
Rob Pike4f61fc92010-09-04 10:36:13 +100026 count = count + 1
Rob Pike126150d2008-06-06 13:28:03 -070027 }
Rob Pike4f61fc92010-09-04 10:36:13 +100028 assertequal(count, 1, "if true")
Rob Pike126150d2008-06-06 13:28:03 -070029
Rob Pike4f61fc92010-09-04 10:36:13 +100030 count = 0
Rob Pike126150d2008-06-06 13:28:03 -070031 if false {
Rob Pike4f61fc92010-09-04 10:36:13 +100032 count = count + 1
Rob Pike126150d2008-06-06 13:28:03 -070033 }
Rob Pike4f61fc92010-09-04 10:36:13 +100034 assertequal(count, 0, "if false")
Rob Pike126150d2008-06-06 13:28:03 -070035
Rob Pike4f61fc92010-09-04 10:36:13 +100036 count = 0
Rob Pike126150d2008-06-06 13:28:03 -070037 if one := 1; true {
Rob Pike4f61fc92010-09-04 10:36:13 +100038 count = count + one
Rob Pike126150d2008-06-06 13:28:03 -070039 }
Rob Pike4f61fc92010-09-04 10:36:13 +100040 assertequal(count, 1, "if true one")
Rob Pike126150d2008-06-06 13:28:03 -070041
Rob Pike4f61fc92010-09-04 10:36:13 +100042 count = 0
Rob Pike126150d2008-06-06 13:28:03 -070043 if one := 1; false {
Rob Pike4f61fc92010-09-04 10:36:13 +100044 count = count + 1
45 _ = one
Rob Pike126150d2008-06-06 13:28:03 -070046 }
Rob Pike4f61fc92010-09-04 10:36:13 +100047 assertequal(count, 0, "if false one")
Rob Pike126150d2008-06-06 13:28:03 -070048
Rob Pike4f61fc92010-09-04 10:36:13 +100049 count = 0
Rob Pike126150d2008-06-06 13:28:03 -070050 if i5 < i7 {
Rob Pike4f61fc92010-09-04 10:36:13 +100051 count = count + 1
Rob Pike126150d2008-06-06 13:28:03 -070052 }
Rob Pike4f61fc92010-09-04 10:36:13 +100053 assertequal(count, 1, "if cond")
Rob Pike126150d2008-06-06 13:28:03 -070054
Rob Pike4f61fc92010-09-04 10:36:13 +100055 count = 0
Rob Pike126150d2008-06-06 13:28:03 -070056 if true {
Rob Pike4f61fc92010-09-04 10:36:13 +100057 count = count + 1
Russ Cox58e19aa2011-07-14 17:15:52 -040058 } else {
Rob Pike4f61fc92010-09-04 10:36:13 +100059 count = count - 1
Russ Cox58e19aa2011-07-14 17:15:52 -040060 }
Rob Pike4f61fc92010-09-04 10:36:13 +100061 assertequal(count, 1, "if else true")
Rob Pike126150d2008-06-06 13:28:03 -070062
Rob Pike4f61fc92010-09-04 10:36:13 +100063 count = 0
Rob Pike126150d2008-06-06 13:28:03 -070064 if false {
Rob Pike4f61fc92010-09-04 10:36:13 +100065 count = count + 1
Russ Cox58e19aa2011-07-14 17:15:52 -040066 } else {
Rob Pike4f61fc92010-09-04 10:36:13 +100067 count = count - 1
Russ Cox58e19aa2011-07-14 17:15:52 -040068 }
Rob Pike4f61fc92010-09-04 10:36:13 +100069 assertequal(count, -1, "if else false")
Rob Pike126150d2008-06-06 13:28:03 -070070
Rob Pike4f61fc92010-09-04 10:36:13 +100071 count = 0
Russ Cox58e19aa2011-07-14 17:15:52 -040072 if t := 1; false {
Rob Pike4f61fc92010-09-04 10:36:13 +100073 count = count + 1
74 _ = t
75 t := 7
76 _ = t
Russ Cox58e19aa2011-07-14 17:15:52 -040077 } else {
Rob Pike4f61fc92010-09-04 10:36:13 +100078 count = count - t
Russ Cox58e19aa2011-07-14 17:15:52 -040079 }
Rob Pike4f61fc92010-09-04 10:36:13 +100080 assertequal(count, -1, "if else false var")
Rob Pike126150d2008-06-06 13:28:03 -070081
Rob Pike4f61fc92010-09-04 10:36:13 +100082 count = 0
83 t := 1
Rob Pike126150d2008-06-06 13:28:03 -070084 if false {
Rob Pike4f61fc92010-09-04 10:36:13 +100085 count = count + 1
86 t := 7
87 _ = t
Russ Cox58e19aa2011-07-14 17:15:52 -040088 } else {
Rob Pike4f61fc92010-09-04 10:36:13 +100089 count = count - t
Russ Cox58e19aa2011-07-14 17:15:52 -040090 }
Rob Pike4f61fc92010-09-04 10:36:13 +100091 _ = t
92 assertequal(count, -1, "if else false var outside")
Rob Pike126150d2008-06-06 13:28:03 -070093}