]> Cypherpunks.ru repositories - gostls13.git/blob - test/ken/rob1.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / ken / rob1.go
1 // run
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 // Test general operation using a list implementation.
8
9 package main
10
11 type Item interface {
12         Print() string
13 }
14
15 type ListItem struct {
16         item Item
17         next *ListItem
18 }
19
20 type List struct {
21         head *ListItem
22 }
23
24 func (list *List) Init() {
25         list.head = nil
26 }
27
28 func (list *List) Insert(i Item) {
29         item := new(ListItem)
30         item.item = i
31         item.next = list.head
32         list.head = item
33 }
34
35 func (list *List) Print() string {
36         r := ""
37         i := list.head
38         for i != nil {
39                 r += i.item.Print()
40                 i = i.next
41         }
42         return r
43 }
44
45 // Something to put in a list
46 type Integer struct {
47         val int
48 }
49
50 func (this *Integer) Init(i int) *Integer {
51         this.val = i
52         return this
53 }
54
55 func (this *Integer) Print() string {
56         return string(this.val + '0')
57 }
58
59 func main() {
60         list := new(List)
61         list.Init()
62         for i := 0; i < 10; i = i + 1 {
63                 integer := new(Integer)
64                 integer.Init(i)
65                 list.Insert(integer)
66         }
67
68         r := list.Print()
69         if r != "9876543210" {
70                 panic(r)
71         }
72 }