2008-06-06 14:28:03 -06:00
|
|
|
// $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 assert(cond bool, msg string) {
|
|
|
|
if !cond {
|
2010-09-03 18:36:13 -06:00
|
|
|
print("assertion fail: ", msg, "\n")
|
|
|
|
panic(1)
|
2008-06-06 14:28:03 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
2010-09-03 18:36:13 -06:00
|
|
|
i5 := 5
|
|
|
|
i7 := 7
|
|
|
|
hello := "hello"
|
2008-06-06 14:28:03 -06:00
|
|
|
|
|
|
|
switch true {
|
2010-09-03 18:36:13 -06:00
|
|
|
case i5 < 5: assert(false, "<")
|
|
|
|
case i5 == 5: assert(true, "!")
|
|
|
|
case i5 > 5: assert(false, ">")
|
2008-06-06 14:28:03 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
switch {
|
2010-09-03 18:36:13 -06:00
|
|
|
case i5 < 5: assert(false, "<")
|
|
|
|
case i5 == 5: assert(true, "!")
|
|
|
|
case i5 > 5: assert(false, ">")
|
2008-06-06 14:28:03 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
switch x := 5; true {
|
2010-09-03 18:36:13 -06:00
|
|
|
case i5 < x: assert(false, "<")
|
|
|
|
case i5 == x: assert(true, "!")
|
|
|
|
case i5 > x: assert(false, ">")
|
2008-06-06 14:28:03 -06:00
|
|
|
}
|
|
|
|
|
2008-06-06 16:53:14 -06:00
|
|
|
switch x := 5; true {
|
2010-09-03 18:36:13 -06:00
|
|
|
case i5 < x: assert(false, "<")
|
|
|
|
case i5 == x: assert(true, "!")
|
|
|
|
case i5 > x: assert(false, ">")
|
2008-06-06 14:28:03 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
switch i5 {
|
2010-09-03 18:36:13 -06:00
|
|
|
case 0: assert(false, "0")
|
|
|
|
case 1: assert(false, "1")
|
|
|
|
case 2: assert(false, "2")
|
|
|
|
case 3: assert(false, "3")
|
|
|
|
case 4: assert(false, "4")
|
|
|
|
case 5: assert(true, "5")
|
|
|
|
case 6: assert(false, "6")
|
|
|
|
case 7: assert(false, "7")
|
|
|
|
case 8: assert(false, "8")
|
|
|
|
case 9: assert(false, "9")
|
|
|
|
default: assert(false, "default")
|
2008-06-06 14:28:03 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
switch i5 {
|
2010-09-03 18:36:13 -06:00
|
|
|
case 0,1,2,3,4: assert(false, "4")
|
|
|
|
case 5: assert(true, "5")
|
|
|
|
case 6,7,8,9: assert(false, "9")
|
|
|
|
default: assert(false, "default")
|
2008-06-06 14:28:03 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
switch i5 {
|
|
|
|
case 0:
|
|
|
|
case 1:
|
|
|
|
case 2:
|
|
|
|
case 3:
|
2010-09-03 18:36:13 -06:00
|
|
|
case 4: assert(false, "4")
|
|
|
|
case 5: assert(true, "5")
|
2008-06-06 14:28:03 -06:00
|
|
|
case 6:
|
|
|
|
case 7:
|
|
|
|
case 8:
|
2009-09-14 22:03:53 -06:00
|
|
|
case 9:
|
2010-09-03 18:36:13 -06:00
|
|
|
default: assert(i5 == 5, "good")
|
2008-06-06 14:28:03 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
switch i5 {
|
2010-09-03 18:36:13 -06:00
|
|
|
case 0: dummy := 0; _ = dummy; fallthrough
|
|
|
|
case 1: dummy := 0; _ = dummy; fallthrough
|
|
|
|
case 2: dummy := 0; _ = dummy; fallthrough
|
|
|
|
case 3: dummy := 0; _ = dummy; fallthrough
|
|
|
|
case 4: dummy := 0; _ = dummy; assert(false, "4")
|
|
|
|
case 5: dummy := 0; _ = dummy; fallthrough
|
|
|
|
case 6: dummy := 0; _ = dummy; fallthrough
|
|
|
|
case 7: dummy := 0; _ = dummy; fallthrough
|
|
|
|
case 8: dummy := 0; _ = dummy; fallthrough
|
|
|
|
case 9: dummy := 0; _ = dummy; fallthrough
|
|
|
|
default: dummy := 0; _ = dummy; assert(i5 == 5, "good")
|
2008-06-06 14:28:03 -06:00
|
|
|
}
|
|
|
|
|
2010-09-03 18:36:13 -06:00
|
|
|
fired := false
|
2008-06-06 14:28:03 -06:00
|
|
|
switch i5 {
|
2009-09-14 22:03:53 -06:00
|
|
|
case 0: dummy := 0; _ = dummy; fallthrough; // tests scoping of cases
|
2010-09-03 18:36:13 -06:00
|
|
|
case 1: dummy := 0; _ = dummy; fallthrough
|
|
|
|
case 2: dummy := 0; _ = dummy; fallthrough
|
|
|
|
case 3: dummy := 0; _ = dummy; fallthrough
|
|
|
|
case 4: dummy := 0; _ = dummy; assert(false, "4")
|
|
|
|
case 5: dummy := 0; _ = dummy; fallthrough
|
|
|
|
case 6: dummy := 0; _ = dummy; fallthrough
|
|
|
|
case 7: dummy := 0; _ = dummy; fallthrough
|
|
|
|
case 8: dummy := 0; _ = dummy; fallthrough
|
|
|
|
case 9: dummy := 0; _ = dummy; fallthrough
|
|
|
|
default: dummy := 0; _ = dummy; fired = !fired; assert(i5 == 5, "good")
|
2008-06-06 14:28:03 -06:00
|
|
|
}
|
2010-09-03 18:36:13 -06:00
|
|
|
assert(fired, "fired")
|
2008-06-06 14:28:03 -06:00
|
|
|
|
2010-09-03 18:36:13 -06:00
|
|
|
count := 0
|
2008-06-06 14:28:03 -06:00
|
|
|
switch i5 {
|
2010-09-03 18:36:13 -06:00
|
|
|
case 0: count = count + 1; fallthrough
|
|
|
|
case 1: count = count + 1; fallthrough
|
|
|
|
case 2: count = count + 1; fallthrough
|
|
|
|
case 3: count = count + 1; fallthrough
|
|
|
|
case 4: count = count + 1; assert(false, "4")
|
|
|
|
case 5: count = count + 1; fallthrough
|
|
|
|
case 6: count = count + 1; fallthrough
|
|
|
|
case 7: count = count + 1; fallthrough
|
|
|
|
case 8: count = count + 1; fallthrough
|
|
|
|
case 9: count = count + 1; fallthrough
|
|
|
|
default: assert(i5 == count, "good")
|
2008-06-06 14:28:03 -06:00
|
|
|
}
|
2010-09-03 18:36:13 -06:00
|
|
|
assert(fired, "fired")
|
2008-06-06 14:28:03 -06:00
|
|
|
|
2008-06-15 21:24:30 -06:00
|
|
|
switch hello {
|
2010-09-03 18:36:13 -06:00
|
|
|
case "wowie": assert(false, "wowie")
|
|
|
|
case "hello": assert(true, "hello")
|
|
|
|
case "jumpn": assert(false, "jumpn")
|
|
|
|
default: assert(false, "default")
|
2008-06-15 21:24:30 -06:00
|
|
|
}
|
|
|
|
|
2010-09-03 18:36:13 -06:00
|
|
|
fired = false
|
2008-06-06 14:28:03 -06:00
|
|
|
switch i := i5 + 2; i {
|
2010-09-03 18:36:13 -06:00
|
|
|
case i7: fired = true
|
|
|
|
default: assert(false, "fail")
|
2008-06-06 14:28:03 -06:00
|
|
|
}
|
2010-09-03 18:36:13 -06:00
|
|
|
assert(fired, "var")
|
2008-06-06 14:28:03 -06:00
|
|
|
}
|