aboutsummaryrefslogtreecommitdiff
path: root/test/switch.go
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2008-06-06 13:28:03 -0700
committerRob Pike <r@golang.org>2008-06-06 13:28:03 -0700
commit126150d0f665e1a5a5103f85f4d7b1ff97f71f9d (patch)
tree9fc78195cd6f45b370bba69597b64afd6e0f7bb3 /test/switch.go
parent27fb2abf76f53168862b5140df1cad95b5804fe6 (diff)
downloadgo-126150d0f665e1a5a5103f85f4d7b1ff97f71f9d.tar.gz
go-126150d0f665e1a5a5103f85f4d7b1ff97f71f9d.zip
lots of new tests
SVN=121464
Diffstat (limited to 'test/switch.go')
-rw-r--r--test/switch.go131
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");
+}