Initial commit: Go 1.23 release state
This commit is contained in:
116
test/typeswitch.go
Normal file
116
test/typeswitch.go
Normal file
@@ -0,0 +1,116 @@
|
||||
// run
|
||||
|
||||
// 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.
|
||||
|
||||
// Test simple type switches, including chans, maps etc.
|
||||
|
||||
package main
|
||||
|
||||
import "os"
|
||||
|
||||
const (
|
||||
Bool = iota
|
||||
Int
|
||||
Float
|
||||
String
|
||||
Struct
|
||||
Chan
|
||||
Array
|
||||
Map
|
||||
Func
|
||||
Last
|
||||
)
|
||||
|
||||
type S struct {
|
||||
a int
|
||||
}
|
||||
|
||||
var s S = S{1234}
|
||||
|
||||
var c = make(chan int)
|
||||
|
||||
var a = []int{0, 1, 2, 3}
|
||||
|
||||
var m = make(map[string]int)
|
||||
|
||||
func assert(b bool, s string) {
|
||||
if !b {
|
||||
println(s)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func f(i int) interface{} {
|
||||
switch i {
|
||||
case Bool:
|
||||
return true
|
||||
case Int:
|
||||
return 7
|
||||
case Float:
|
||||
return 7.4
|
||||
case String:
|
||||
return "hello"
|
||||
case Struct:
|
||||
return s
|
||||
case Chan:
|
||||
return c
|
||||
case Array:
|
||||
return a
|
||||
case Map:
|
||||
return m
|
||||
case Func:
|
||||
return f
|
||||
}
|
||||
panic("bad type number")
|
||||
}
|
||||
|
||||
func main() {
|
||||
for i := Bool; i < Last; i++ {
|
||||
switch x := f(i).(type) {
|
||||
case bool:
|
||||
assert(x == true && i == Bool, "bool")
|
||||
case int:
|
||||
assert(x == 7 && i == Int, "int")
|
||||
case float64:
|
||||
assert(x == 7.4 && i == Float, "float64")
|
||||
case string:
|
||||
assert(x == "hello" && i == String, "string")
|
||||
case S:
|
||||
assert(x.a == 1234 && i == Struct, "struct")
|
||||
case chan int:
|
||||
assert(x == c && i == Chan, "chan")
|
||||
case []int:
|
||||
assert(x[3] == 3 && i == Array, "array")
|
||||
case map[string]int:
|
||||
assert(x != nil && i == Map, "map")
|
||||
case func(i int) interface{}:
|
||||
assert(x != nil && i == Func, "fun")
|
||||
default:
|
||||
assert(false, "unknown")
|
||||
}
|
||||
}
|
||||
|
||||
// boolean switch (has had bugs in past; worth writing down)
|
||||
switch {
|
||||
case true:
|
||||
assert(true, "switch 2 bool")
|
||||
default:
|
||||
assert(false, "switch 2 unknown")
|
||||
}
|
||||
|
||||
switch true {
|
||||
case true:
|
||||
assert(true, "switch 3 bool")
|
||||
default:
|
||||
assert(false, "switch 3 unknown")
|
||||
}
|
||||
|
||||
switch false {
|
||||
case false:
|
||||
assert(true, "switch 4 bool")
|
||||
default:
|
||||
assert(false, "switch 4 unknown")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user