blob: 6731ab7ee8b0123a2a2fc64027cfebb115d49d45 [file] [log] [blame]
Russ Cox0b477ef2012-02-16 23:48:57 -05001// run
Rob Pikec8476472009-01-27 15:08:08 -08002
3// Copyright 2009 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
Rob Pike83976e32012-02-19 14:28:53 +11007// Test defer.
8
Rob Pikec8476472009-01-27 15:08:08 -08009package main
10
11import "fmt"
12
13var result string
14
Rob Piked2fc5d62010-02-02 10:53:37 +110015func addInt(i int) { result += fmt.Sprint(i) }
Rob Pikec8476472009-01-27 15:08:08 -080016
17func test1helper() {
18 for i := 0; i < 10; i++ {
19 defer addInt(i)
20 }
21}
22
23func test1() {
Rob Piked2fc5d62010-02-02 10:53:37 +110024 result = ""
25 test1helper()
Rob Pikec8476472009-01-27 15:08:08 -080026 if result != "9876543210" {
Rob Piked2fc5d62010-02-02 10:53:37 +110027 fmt.Printf("test1: bad defer result (should be 9876543210): %q\n", result)
Alan Donovan052c9422013-02-12 13:17:49 -050028 panic("defer")
Rob Pikec8476472009-01-27 15:08:08 -080029 }
30}
31
Russ Cox2ee420f2010-09-24 11:55:48 -040032func addDotDotDot(v ...interface{}) { result += fmt.Sprint(v...) }
Rob Pikec8476472009-01-27 15:08:08 -080033
34func test2helper() {
35 for i := 0; i < 10; i++ {
36 defer addDotDotDot(i)
37 }
38}
39
40func test2() {
Rob Piked2fc5d62010-02-02 10:53:37 +110041 result = ""
42 test2helper()
Rob Pikec8476472009-01-27 15:08:08 -080043 if result != "9876543210" {
Rob Piked2fc5d62010-02-02 10:53:37 +110044 fmt.Printf("test2: bad defer result (should be 9876543210): %q\n", result)
Alan Donovan052c9422013-02-12 13:17:49 -050045 panic("defer")
Rob Pikec8476472009-01-27 15:08:08 -080046 }
47}
48
49func main() {
Rob Piked2fc5d62010-02-02 10:53:37 +110050 test1()
51 test2()
Rob Pikec8476472009-01-27 15:08:08 -080052}