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 composite literals. 8 9 package main 10 11 type T struct { 12 i int 13 f float64 14 s string 15 next *T 16 } 17 18 type R struct { 19 num int 20 } 21 22 func itor(a int) *R { 23 r := new(R) 24 r.num = a 25 return r 26 } 27 28 func eq(a []*R) { 29 for i := 0; i < len(a); i++ { 30 if a[i].num != i { 31 panic("bad") 32 } 33 } 34 } 35 36 func teq(t *T, n int) { 37 for i := 0; i < n; i++ { 38 if t == nil || t.i != i { 39 panic("bad") 40 } 41 t = t.next 42 } 43 if t != nil { 44 panic("bad") 45 } 46 } 47 48 type P struct { 49 a, b int 50 } 51 52 func NewP(a, b int) *P { 53 return &P{a, b} 54 } 55 56 func main() { 57 var t T 58 t = T{0, 7.2, "hi", &t} 59 60 var tp *T 61 tp = &T{0, 7.2, "hi", &t} 62 63 tl := &T{i: 0, next: &T{i: 1, next: &T{i: 2, next: &T{i: 3, next: &T{i: 4}}}}} 64 teq(tl, 5) 65 66 a1 := []int{1, 2, 3} 67 if len(a1) != 3 { 68 panic("a1") 69 } 70 a2 := [10]int{1, 2, 3} 71 if len(a2) != 10 || cap(a2) != 10 { 72 panic("a2") 73 } 74 75 a3 := [10]int{1, 2, 3} 76 if len(a3) != 10 || a2[3] != 0 { 77 panic("a3") 78 } 79 80 var oai []int 81 oai = []int{1, 2, 3} 82 if len(oai) != 3 { 83 panic("oai") 84 } 85 86 at := [...]*T{&t, tp, &t} 87 if len(at) != 3 { 88 panic("at") 89 } 90 91 c := make(chan int) 92 ac := []chan int{c, c, c} 93 if len(ac) != 3 { 94 panic("ac") 95 } 96 97 aat := [][len(at)]*T{at, at} 98 if len(aat) != 2 || len(aat[1]) != 3 { 99 panic("aat") 100 } 101 102 s := string([]byte{'h', 'e', 'l', 'l', 'o'}) 103 if s != "hello" { 104 panic("s") 105 } 106 107 m := map[string]float64{"one": 1.0, "two": 2.0, "pi": 22. / 7.} 108 if len(m) != 3 { 109 panic("m") 110 } 111 112 eq([]*R{itor(0), itor(1), itor(2), itor(3), itor(4), itor(5)}) 113 eq([]*R{{0}, {1}, {2}, {3}, {4}, {5}}) 114 115 p1 := NewP(1, 2) 116 p2 := NewP(1, 2) 117 if p1 == p2 { 118 panic("NewP") 119 } 120 } 121