]> Cypherpunks.ru repositories - gostls13.git/blob - test/reorder.go
test/[n-r]*.go: add documentation
[gostls13.git] / test / reorder.go
1 // run
2
3 // Copyright 2011 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
7 // Test reordering of assignments.
8
9 package main
10
11 import "fmt"
12
13 func main() {
14         p1()
15         p2()
16         p3()
17         p4()
18         p5()
19         p6()
20         p7()
21         p8()
22 }
23
24 var gx []int
25
26 func f(i int) int {
27         return gx[i]
28 }
29
30 func check(x []int, x0, x1, x2 int) {
31         if x[0] != x0 || x[1] != x1 || x[2] != x2 {
32                 fmt.Printf("%v, want %d,%d,%d\n", x, x0, x1, x2)
33                 panic("failed")
34         }
35 }
36
37 func check3(x, y, z, xx, yy, zz int) {
38         if x != xx || y != yy || z != zz {
39                 fmt.Printf("%d,%d,%d, want %d,%d,%d\n", x, y, z, xx, yy, zz)
40                 panic("failed")
41         }
42 }
43
44 func p1() {
45         x := []int{1,2,3}
46         i := 0
47         i, x[i] = 1, 100
48         _ = i
49         check(x, 100, 2, 3)
50 }
51
52 func p2() {
53         x := []int{1,2,3}
54         i := 0
55         x[i], i = 100, 1
56         _ = i
57         check(x, 100, 2, 3)
58 }
59
60 func p3() {
61         x := []int{1,2,3}
62         y := x
63         gx = x
64         x[1], y[0] = f(0), f(1)
65         check(x, 2, 1, 3)
66 }
67
68 func p4() {
69         x := []int{1,2,3}
70         y := x
71         gx = x
72         x[1], y[0] = gx[0], gx[1]
73         check(x, 2, 1, 3)
74 }
75
76 func p5() {
77         x := []int{1,2,3}
78         y := x
79         p := &x[0]
80         q := &x[1]
81         *p, *q = x[1], y[0]
82         check(x, 2, 1, 3)
83 }
84
85 func p6() {
86         x := 1
87         y := 2
88         z := 3
89         px := &x
90         py := &y
91         *px, *py = y, x
92         check3(x, y, z, 2, 1, 3)        
93 }
94
95 func f1(x, y, z int) (xx, yy, zz int) {
96         return x, y, z
97 }
98
99 func f2() (x, y, z int) {
100         return f1(2, 1, 3)
101 }
102
103 func p7() {
104         x, y, z := f2()
105         check3(x, y, z, 2, 1, 3)
106 }
107
108 func p8() {
109         x := []int{1,2,3}
110
111         defer func() {
112                 err := recover()
113                 if err == nil {
114                         panic("not panicking")
115                 }
116                 check(x, 100, 2, 3)
117         }()
118
119         i := 0
120         i, x[i], x[5] = 1, 100, 500
121 }