summaryrefslogtreecommitdiffstats
path: root/test/ken/intervar.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/ken/intervar.go')
-rw-r--r--test/ken/intervar.go69
1 files changed, 69 insertions, 0 deletions
diff --git a/test/ken/intervar.go b/test/ken/intervar.go
new file mode 100644
index 0000000..8a2fca0
--- /dev/null
+++ b/test/ken/intervar.go
@@ -0,0 +1,69 @@
+// run
+
+// 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.
+
+// Test interface assignment.
+
+package main
+
+type Iputs interface {
+ puts (s string) string;
+}
+
+// ---------
+
+type Print struct {
+ whoami int;
+ put Iputs;
+}
+
+func (p *Print) dop() string {
+ r := " print " + string(p.whoami + '0')
+ return r + p.put.puts("abc");
+}
+
+// ---------
+
+type Bio struct {
+ whoami int;
+ put Iputs;
+}
+
+func (b *Bio) puts(s string) string {
+ r := " bio " + string(b.whoami + '0')
+ return r + b.put.puts(s);
+}
+
+// ---------
+
+type File struct {
+ whoami int;
+ put Iputs;
+}
+
+func (f *File) puts(s string) string {
+ return " file " + string(f.whoami + '0') + " -- " + s
+}
+
+func
+main() {
+ p := new(Print);
+ b := new(Bio);
+ f := new(File);
+
+ p.whoami = 1;
+ p.put = b;
+
+ b.whoami = 2;
+ b.put = f;
+
+ f.whoami = 3;
+
+ r := p.dop();
+ expected := " print 1 bio 2 file 3 -- abc"
+ if r != expected {
+ panic(r + " != " + expected)
+ }
+}