blob: a55936df841d640843ce31f516aea9ae9424c43c [file] [log] [blame]
Russ Coxe5124812009-01-08 18:06:06 -08001// $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
10package main
11
Russ Cox839a6842009-01-20 14:40:40 -080012type I interface { M() int64 }
Russ Coxe5124812009-01-08 18:06:06 -080013
Russ Cox839a6842009-01-20 14:40:40 -080014type BigPtr struct { a, b, c, d int64 }
Russ Coxe5124812009-01-08 18:06:06 -080015func (z *BigPtr) M() int64 { return z.a+z.b+z.c+z.d }
16
Russ Cox839a6842009-01-20 14:40:40 -080017type SmallPtr struct { a int32 }
Russ Coxe5124812009-01-08 18:06:06 -080018func (z *SmallPtr) M() int64 { return int64(z.a) }
19
Russ Cox839a6842009-01-20 14:40:40 -080020type IntPtr int32
Russ Coxe5124812009-01-08 18:06:06 -080021func (z *IntPtr) M() int64 { return int64(*z) }
22
23var bad bool
24
25func test(name string, i I) {
26 m := i.M();
27 if m != 12345 {
28 println(name, m);
29 bad = true;
30 }
31}
32
33func 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
Russ Cox839a6842009-01-20 14:40:40 -080046type Big struct { a, b, c, d int64 }
Russ Coxe5124812009-01-08 18:06:06 -080047func (z Big) M() int64 { return z.a+z.b+z.c+z.d }
48
Russ Cox839a6842009-01-20 14:40:40 -080049type Small struct { a int32 }
Russ Coxe5124812009-01-08 18:06:06 -080050func (z Small) M() int64 { return int64(z.a) }
51
Russ Cox839a6842009-01-20 14:40:40 -080052type Int int32
Russ Coxe5124812009-01-08 18:06:06 -080053func (z Int) M() int64 { return int64(z) }
54
55func 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
68func main() {
69 ptrs();
70 nonptrs();
71
72 if bad {
Russ Cox36096242009-01-16 14:58:14 -080073 sys.Exit(1)
Russ Coxe5124812009-01-08 18:06:06 -080074 }
75}