| // $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") | |
| } |