| // $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 { | 
 | 		print("assertion fail: ", msg, "\n") | 
 | 		panic(1) | 
 | 	} | 
 | } | 
 |  | 
 | func main() { | 
 | 	i5 := 5 | 
 | 	i7 := 7 | 
 | 	hello := "hello" | 
 |  | 
 | 	switch true { | 
 | 	case i5 < 5: assert(false, "<") | 
 | 	case i5 == 5: assert(true, "!") | 
 | 	case i5 > 5: assert(false, ">") | 
 | 	} | 
 |  | 
 | 	switch { | 
 | 	case i5 < 5: assert(false, "<") | 
 | 	case i5 == 5: assert(true, "!") | 
 | 	case i5 > 5: assert(false, ">") | 
 | 	} | 
 |  | 
 | 	switch x := 5; true { | 
 | 	case i5 < x: assert(false, "<") | 
 | 	case i5 == x: assert(true, "!") | 
 | 	case i5 > x: assert(false, ">") | 
 | 	} | 
 |  | 
 | 	switch x := 5; true { | 
 | 	case i5 < x: assert(false, "<") | 
 | 	case i5 == x: assert(true, "!") | 
 | 	case i5 > x: assert(false, ">") | 
 | 	} | 
 |  | 
 | 	switch i5 { | 
 | 	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") | 
 | 	} | 
 |  | 
 | 	switch i5 { | 
 | 	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") | 
 | 	} | 
 |  | 
 | 	switch i5 { | 
 | 	case 0: | 
 | 	case 1: | 
 | 	case 2: | 
 | 	case 3: | 
 | 	case 4: assert(false, "4") | 
 | 	case 5: assert(true, "5") | 
 | 	case 6: | 
 | 	case 7: | 
 | 	case 8: | 
 | 	case 9: | 
 | 	default: assert(i5 == 5, "good") | 
 | 	} | 
 |  | 
 | 	switch i5 { | 
 | 	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") | 
 | 	} | 
 |  | 
 | 	fired := false | 
 | 	switch i5 { | 
 | 	case 0: dummy := 0; _ = dummy; fallthrough;  // tests scoping of cases | 
 | 	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") | 
 | 	} | 
 | 	assert(fired, "fired") | 
 |  | 
 | 	count := 0 | 
 | 	switch i5 { | 
 | 	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") | 
 | 	} | 
 | 	assert(fired, "fired") | 
 |  | 
 | 	switch hello { | 
 | 	case "wowie": assert(false, "wowie") | 
 | 	case "hello": assert(true, "hello") | 
 | 	case "jumpn": assert(false, "jumpn") | 
 | 	default: assert(false, "default") | 
 | 	} | 
 |  | 
 | 	fired = false | 
 | 	switch i := i5 + 2; i { | 
 | 	case i7: fired = true | 
 | 	default: assert(false, "fail") | 
 | 	} | 
 | 	assert(fired, "var") | 
 | } |