modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/ken/rob1.go (about) 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 }