...
Run Format

Source file test/recover2.go

Documentation: test

  // run
  
  // Copyright 2010 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 of recover for run-time errors.
  
  // TODO(rsc):
  //	null pointer accesses
  
  package main
  
  import "strings"
  
  var x = make([]byte, 10)
  
  func main() {
  	test1()
  	test2()
  	test3()
  	test4()
  	test5()
  	test6()
  	test7()
  }
  
  func mustRecover(s string) {
  	v := recover()
  	if v == nil {
  		panic("expected panic")
  	}
  	if e := v.(error).Error(); strings.Index(e, s) < 0 {
  		panic("want: " + s + "; have: " + e)
  	}
  }
  
  func test1() {
  	defer mustRecover("index")
  	println(x[123])
  }
  
  func test2() {
  	defer mustRecover("slice")
  	println(x[5:15])
  }
  
  func test3() {
  	defer mustRecover("slice")
  	var lo = 11
  	var hi = 9
  	println(x[lo:hi])
  }
  
  func test4() {
  	defer mustRecover("interface")
  	var x interface{} = 1
  	println(x.(float32))
  }
  
  type T struct {
  	a, b int
  	c    []int
  }
  
  func test5() {
  	defer mustRecover("uncomparable")
  	var x T
  	var z interface{} = x
  	println(z != z)
  }
  
  func test6() {
  	defer mustRecover("unhashable")
  	var x T
  	var z interface{} = x
  	m := make(map[interface{}]int)
  	m[z] = 1
  }
  
  func test7() {
  	defer mustRecover("divide by zero")
  	var x, y int
  	println(x / y)
  }
  

View as plain text