summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-05-07 13:43:00 -0700
committerRuss Cox <rsc@golang.org>2009-05-07 13:43:00 -0700
commitf079e0ea0dc3d3fa97cc6d2f138766a40e63ec89 (patch)
treea1ca7e7e5b76ffd0202645cfd4589fa697be7767
parent8be34efb0628abc47c2a05969c2795df544fd873 (diff)
downloadgolang-f079e0ea0dc3d3fa97cc6d2f138766a40e63ec89.tar.gz
test of struct with embedded interface.
also tests method calls on ptr to interface value. R=r DELTA=74 (74 added, 0 deleted, 0 changed) OCL=28419 CL=28424
-rw-r--r--test/interface10.go78
1 files changed, 78 insertions, 0 deletions
diff --git a/test/interface10.go b/test/interface10.go
new file mode 100644
index 000000000..6afd42a2f
--- /dev/null
+++ b/test/interface10.go
@@ -0,0 +1,78 @@
+// $G $D/$F.go && $L $F.$A && ./$A.out
+
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+const Value = 1e12
+
+type Inter interface { M() int64 }
+
+type T int64
+func (t T) M() int64 { return t }
+var t = T(Value)
+var pt = &t
+var ti Inter = t
+var pti = &ti
+
+type S struct { Inter }
+var s = S{ ti }
+var ps = &s
+
+type SP struct { *Inter }
+var sp = SP{ &ti }
+var psp = &sp
+
+var i Inter
+var pi = &i
+
+var ok = true
+
+func check(v int64, s string) {
+ if v != Value {
+ println(s, v);
+ ok = false;
+ }
+}
+
+func main() {
+ check(t.M(), "t.M");
+ check(pt.M(), "pt.M");
+ check(ti.M(), "ti.M");
+ check(pti.M(), "pti.M");
+ check(s.M(), "s.M");
+ check(ps.M(), "ps.M");
+ check(sp.M(), "sp.M");
+ check(psp.M(), "psp.M");
+
+ i = t;
+ check(i.M(), "i.M - i = t");
+ check(pi.M(), "pi.M - i = t");
+
+ i = pt;
+ check(i.M(), "i.M - i = pt");
+ check(pi.M(), "pi.M - i = pt");
+
+ i = s;
+ check(i.M(), "i.M - i = s");
+ check(pi.M(), "pi.M - i = s");
+
+ i = ps;
+ check(i.M(), "i.M - i = ps");
+ check(pi.M(), "pi.M - i = ps");
+
+ i = sp;
+ check(i.M(), "i.M - i = sp");
+ check(pi.M(), "pi.M - i = sp");
+
+ i = psp;
+ check(i.M(), "i.M - i = psp");
+ check(pi.M(), "pi.M - i = psp");
+
+ if !ok {
+ println("BUG: interface10");
+ sys.Exit(1)
+ }
+}