OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [go.test/] [test/] [fixedbugs/] [bug242.go] - Blame information for rev 700

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 700 jeremybenn
// $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG: tuple evaluation order
2
 
3
// Copyright 2010 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 order of evaluation in tuple assignments.
8
 
9
package main
10
 
11
var i byte = 0
12
var a [30]byte
13
 
14
func f() *byte {
15
        i++
16
        return &a[i-1]
17
}
18
func gbyte() byte {
19
        i++
20
        return 'a' + i - 1
21
}
22
func gint() byte {
23
        i++
24
        return i - 1
25
}
26
func x() (byte, byte) {
27
        i++
28
        return 'a' + i - 1, 'a' + i - 1
29
}
30
func e1(c chan byte, expected byte) chan byte {
31
        if i != expected {
32
                println("e1: got", i, "expected", expected)
33
                panic("fail")
34
        }
35
        i++
36
        return c
37
}
38
 
39
type Empty interface{}
40
type I interface {
41
        Get() byte
42
}
43
type S1 struct {
44
        i byte
45
}
46
 
47
func (p S1) Get() byte { return p.i }
48
 
49
type S2 struct {
50
        i byte
51
}
52
 
53
func e2(p Empty, expected byte) Empty {
54
        if i != expected {
55
                println("e2: got", i, "expected", expected)
56
                panic("fail")
57
        }
58
        i++
59
        return p
60
}
61
func e3(p *I, expected byte) *I {
62
        if i != expected {
63
                println("e3: got", i, "expected", expected)
64
                panic("fail")
65
        }
66
        i++
67
        return p
68
}
69
 
70
func main() {
71
        for i := range a {
72
                a[i] = ' '
73
        }
74
 
75
        // 0     1     2     3        4        5
76
        *f(), *f(), *f() = gbyte(), gbyte(), gbyte()
77
 
78
        // 6     7     8
79
        *f(), *f() = x()
80
 
81
        m := make(map[byte]byte)
82
        m[10] = 'A'
83
        var p1, p2 bool
84
        // 9           10
85
        *f(), p1 = m[gint()]
86
        // 11          12
87
        *f(), p2 = m[gint()]
88
        a[11] += '0'
89
        if !p1 || p2 {
90
                println("bad map check", i, p1, p2)
91
                panic("fail")
92
        }
93
 
94
        m[13] = 'B'
95
        //  13        14
96
        delete(m, gint())
97
        gbyte()
98
        if _, present := m[13]; present {
99
                println("bad map removal")
100
                panic("fail")
101
        }
102
 
103
        c := make(chan byte, 1)
104
        c <- 'C'
105
        // 15          16
106
        *f(), p1 = <-e1(c, 16)
107
        close(c)
108
        // 17          18
109
        *f(), p2 = <-e1(c, 18)
110
        a[17] += '0'
111
        if !p1 || p2 {
112
                println("bad chan check", i, p1, p2)
113
                panic("fail")
114
        }
115
 
116
        s1 := S1{'D'}
117
        s2 := S2{'E'}
118
        var iv I
119
        // 19                20
120
        *e3(&iv, 19), p1 = e2(s1, 20).(I)
121
        // 21                22
122
        *e3(&iv, 21), p2 = e2(s2, 22).(I)
123
        if !p1 || p2 {
124
                println("bad interface check", i, p1, p2)
125
                panic("fail")
126
        }
127
 
128
        s := string(a[0:i])
129
        if s != "def   ii A 0   C 0     " {
130
                println("bad array results:", s)
131
                panic("fail")
132
        }
133
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.