...
Run Format

Source file test/typeswitch.go

Documentation: test

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

View as plain text