diff options
author | Rob Pike <r@golang.org> | 2008-06-06 13:28:03 -0700 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2008-06-06 13:28:03 -0700 |
commit | 126150d0f665e1a5a5103f85f4d7b1ff97f71f9d (patch) | |
tree | 9fc78195cd6f45b370bba69597b64afd6e0f7bb3 /test/switch.go | |
parent | 27fb2abf76f53168862b5140df1cad95b5804fe6 (diff) | |
download | go-126150d0f665e1a5a5103f85f4d7b1ff97f71f9d.tar.gz go-126150d0f665e1a5a5103f85f4d7b1ff97f71f9d.zip |
lots of new tests
SVN=121464
Diffstat (limited to 'test/switch.go')
-rw-r--r-- | test/switch.go | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/test/switch.go b/test/switch.go new file mode 100644 index 0000000000..1184230db2 --- /dev/null +++ b/test/switch.go @@ -0,0 +1,131 @@ +// $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; + + 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; { // BUG?: true should not be necessary but now made mandatory in go_lang.txt + 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; fallthrough; + case 1: dummy := 0; fallthrough; + case 2: dummy := 0; fallthrough; + case 3: dummy := 0; fallthrough; + case 4: dummy := 0; assert(false, "4"); + case 5: dummy := 0; fallthrough; + case 6: dummy := 0; fallthrough; + case 7: dummy := 0; fallthrough; + case 8: dummy := 0; fallthrough; + case 9: dummy := 0; fallthrough; + default: dummy := 0; assert(i5 == 5, "good"); + } + + fired := 0; // BUG: should be able to use 'false' + switch i5 { + case 0: dummy := 0; fallthrough; // tests scoping of cases + case 1: dummy := 0; fallthrough; + case 2: dummy := 0; fallthrough; + case 3: dummy := 0; fallthrough; + case 4: dummy := 0; assert(false, "4"); + case 5: dummy := 0; fallthrough; + case 6: dummy := 0; fallthrough; + case 7: dummy := 0; fallthrough; + case 8: dummy := 0; fallthrough; + case 9: dummy := 0; fallthrough; + default: dummy := 0; fired = fired + 1; assert(i5 == 5, "good"); + } + assert(fired > 0, "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 > 0, "fired"); + + fired = 0; + switch i := i5 + 2; i { + case i7: fired = 1; + default: assert(false, "fail"); + } + assert(fired == 1, "var"); +} |