Imported Upstream version 4.7.2
[platform/upstream/gcc48.git] / gcc / testsuite / go.test / test / interface / bigdata.go
1 // $G $D/$F.go && $L $F.$A && ./$A.out
2
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
7 // check that big vs small, pointer vs not
8 // interface methods work.
9
10 package main
11
12 type I interface { M() int64 }
13
14 type BigPtr struct { a, b, c, d int64 }
15 func (z *BigPtr) M() int64 { return z.a+z.b+z.c+z.d }
16
17 type SmallPtr struct { a int32 }
18 func (z *SmallPtr) M() int64 { return int64(z.a) }
19
20 type IntPtr int32
21 func (z *IntPtr) M() int64 { return int64(*z) }
22
23 var bad bool
24
25 func test(name string, i I) {
26         m := i.M()
27         if m != 12345 {
28                 println(name, m)
29                 bad = true
30         }
31 }
32
33 func ptrs() {
34         var bigptr BigPtr = BigPtr{ 10000, 2000, 300, 45 }
35         var smallptr SmallPtr = SmallPtr{ 12345 }
36         var intptr IntPtr = 12345
37
38 //      test("bigptr", bigptr)
39         test("&bigptr", &bigptr)
40 //      test("smallptr", smallptr)
41         test("&smallptr", &smallptr)
42 //      test("intptr", intptr)
43         test("&intptr", &intptr)
44 }
45
46 type Big struct { a, b, c, d int64 }
47 func (z Big) M() int64 { return z.a+z.b+z.c+z.d }
48
49 type Small struct { a int32 }
50 func (z Small) M() int64 { return int64(z.a) }
51
52 type Int int32
53 func (z Int) M() int64 { return int64(z) }
54
55 func nonptrs() {
56         var big Big = Big{ 10000, 2000, 300, 45 }
57         var small Small = Small{ 12345 }
58         var int Int = 12345
59
60         test("big", big)
61         test("&big", &big)
62         test("small", small)
63         test("&small", &small)
64         test("int", int)
65         test("&int", &int)
66 }
67
68 func main() {
69         ptrs()
70         nonptrs()
71
72         if bad {
73                 println("BUG: interface4")
74         }
75 }