summaryrefslogtreecommitdiffstats
path: root/test/ken/rob1.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/ken/rob1.go')
-rw-r--r--test/ken/rob1.go72
1 files changed, 72 insertions, 0 deletions
diff --git a/test/ken/rob1.go b/test/ken/rob1.go
new file mode 100644
index 0000000..3042a67
--- /dev/null
+++ b/test/ken/rob1.go
@@ -0,0 +1,72 @@
+// 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 general operation using a list implementation.
+
+package main
+
+type Item interface {
+ Print() string
+}
+
+type ListItem struct {
+ item Item
+ next *ListItem
+}
+
+type List struct {
+ head *ListItem
+}
+
+func (list *List) Init() {
+ list.head = nil
+}
+
+func (list *List) Insert(i Item) {
+ item := new(ListItem)
+ item.item = i
+ item.next = list.head
+ list.head = item
+}
+
+func (list *List) Print() string {
+ r := ""
+ i := list.head
+ for i != nil {
+ r += i.item.Print()
+ i = i.next
+ }
+ return r
+}
+
+// Something to put in a list
+type Integer struct {
+ val int
+}
+
+func (this *Integer) Init(i int) *Integer {
+ this.val = i
+ return this
+}
+
+func (this *Integer) Print() string {
+ return string(this.val + '0')
+}
+
+func main() {
+ list := new(List)
+ list.Init()
+ for i := 0; i < 10; i = i + 1 {
+ integer := new(Integer)
+ integer.Init(i)
+ list.Insert(integer)
+ }
+
+ r := list.Print()
+ if r != "9876543210" {
+ panic(r)
+ }
+}