blob: 649be6d4d39ce02c2c4a8954680825a7f2ac00ed [file] [log] [blame]
Russ Cox0b477ef2012-02-16 23:48:57 -05001// run
Rob Pike5ee2b042008-09-03 15:54:33 -07002
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
Rob Pikefc0dc042012-02-19 13:19:43 +11007// Test composite literals.
8
Rob Pike5ee2b042008-09-03 15:54:33 -07009package main
10
Russ Coxf2b5a072011-01-19 23:09:00 -050011type T struct {
12 i int
13 f float64
14 s string
15 next *T
16}
Rob Pike5ee2b042008-09-03 15:54:33 -070017
Russ Coxf2b5a072011-01-19 23:09:00 -050018type R struct {
19 num int
20}
Rob Pike696815c2008-09-04 13:35:19 -070021
22func itor(a int) *R {
Rob Pike4f61fc92010-09-04 10:36:13 +100023 r := new(R)
24 r.num = a
25 return r
Rob Pike696815c2008-09-04 13:35:19 -070026}
27
Russ Coxd47d8882008-12-18 22:37:22 -080028func eq(a []*R) {
Rob Pike696815c2008-09-04 13:35:19 -070029 for i := 0; i < len(a); i++ {
Russ Coxf2b5a072011-01-19 23:09:00 -050030 if a[i].num != i {
31 panic("bad")
32 }
Rob Pike696815c2008-09-04 13:35:19 -070033 }
34}
35
Russ Cox7dc9d8c2011-12-02 14:13:12 -050036func 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
Russ Coxf2b5a072011-01-19 23:09:00 -050048type P struct {
49 a, b int
50}
51
Russ Cox839a6842009-01-20 14:40:40 -080052func NewP(a, b int) *P {
Russ Coxbe2edb52009-03-03 08:39:12 -080053 return &P{a, b}
Russ Coxbeee6912008-10-21 16:53:54 -070054}
55
Rob Pike5ee2b042008-09-03 15:54:33 -070056func main() {
Rob Pike4f61fc92010-09-04 10:36:13 +100057 var t T
58 t = T{0, 7.2, "hi", &t}
Rob Pike5ee2b042008-09-03 15:54:33 -070059
Rob Pike4f61fc92010-09-04 10:36:13 +100060 var tp *T
61 tp = &T{0, 7.2, "hi", &t}
Rob Pike5ee2b042008-09-03 15:54:33 -070062
Russ Cox5cb1c822011-12-05 14:22:41 -050063 tl := &T{i: 0, next: &T{i: 1, next: &T{i: 2, next: &T{i: 3, next: &T{i: 4}}}}}
Russ Cox7dc9d8c2011-12-02 14:13:12 -050064 teq(tl, 5)
65
Russ Coxf2b5a072011-01-19 23:09:00 -050066 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 }
Rob Pikea577ea32009-01-07 10:35:43 -080074
Russ Coxf2b5a072011-01-19 23:09:00 -050075 a3 := [10]int{1, 2, 3}
76 if len(a3) != 10 || a2[3] != 0 {
77 panic("a3")
78 }
Rob Pike5ee2b042008-09-03 15:54:33 -070079
Rob Pike4f61fc92010-09-04 10:36:13 +100080 var oai []int
Russ Coxf2b5a072011-01-19 23:09:00 -050081 oai = []int{1, 2, 3}
82 if len(oai) != 3 {
83 panic("oai")
84 }
Rob Pike5ee2b042008-09-03 15:54:33 -070085
Rob Pike4f61fc92010-09-04 10:36:13 +100086 at := [...]*T{&t, tp, &t}
Russ Coxf2b5a072011-01-19 23:09:00 -050087 if len(at) != 3 {
88 panic("at")
89 }
Rob Pike5ee2b042008-09-03 15:54:33 -070090
Rob Pike4f61fc92010-09-04 10:36:13 +100091 c := make(chan int)
92 ac := []chan int{c, c, c}
Russ Coxf2b5a072011-01-19 23:09:00 -050093 if len(ac) != 3 {
94 panic("ac")
95 }
Rob Pike5ee2b042008-09-03 15:54:33 -070096
Rob Pike4f61fc92010-09-04 10:36:13 +100097 aat := [][len(at)]*T{at, at}
Russ Coxf2b5a072011-01-19 23:09:00 -050098 if len(aat) != 2 || len(aat[1]) != 3 {
99 panic("aat")
100 }
Russ Cox08ca30b2008-12-19 03:05:37 -0800101
Rob Pike4f61fc92010-09-04 10:36:13 +1000102 s := string([]byte{'h', 'e', 'l', 'l', 'o'})
Russ Coxf2b5a072011-01-19 23:09:00 -0500103 if s != "hello" {
104 panic("s")
105 }
Rob Pike5ee2b042008-09-03 15:54:33 -0700106
Russ Coxf2b5a072011-01-19 23:09:00 -0500107 m := map[string]float64{"one": 1.0, "two": 2.0, "pi": 22. / 7.}
108 if len(m) != 3 {
109 panic("m")
110 }
Rob Pike696815c2008-09-04 13:35:19 -0700111
Rob Pike4f61fc92010-09-04 10:36:13 +1000112 eq([]*R{itor(0), itor(1), itor(2), itor(3), itor(4), itor(5)})
Russ Cox7dc9d8c2011-12-02 14:13:12 -0500113 eq([]*R{{0}, {1}, {2}, {3}, {4}, {5}})
Russ Cox08ca30b2008-12-19 03:05:37 -0800114
Rob Pike4f61fc92010-09-04 10:36:13 +1000115 p1 := NewP(1, 2)
116 p2 := NewP(1, 2)
Russ Coxf2b5a072011-01-19 23:09:00 -0500117 if p1 == p2 {
118 panic("NewP")
119 }
Rob Pike5ee2b042008-09-03 15:54:33 -0700120}