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
9package main
10
11type	M	map[int]int
12type	S	struct{ a,b,c int };
13type	SS	struct{ aa,bb,cc S };
14type	SA	struct{ a,b,c [3]int };
15type	SC	struct{ a,b,c []int };
16type	SM	struct{ a,b,c M };
17
18func
19main() {
20	test("s.a", s.a);
21	test("s.b", s.b);
22	test("s.c", s.c);
23
24	test("ss.aa.a", ss.aa.a);
25	test("ss.aa.b", ss.aa.b);
26	test("ss.aa.c", ss.aa.c);
27
28	test("ss.bb.a", ss.bb.a);
29	test("ss.bb.b", ss.bb.b);
30	test("ss.bb.c", ss.bb.c);
31
32	test("ss.cc.a", ss.cc.a);
33	test("ss.cc.b", ss.cc.b);
34	test("ss.cc.c", ss.cc.c);
35
36	for i:=0; i<3; i++ {
37		test("a[i]", a[i]);
38		test("c[i]", c[i]);
39		test("m[i]", m[i]);
40
41		test("as[i].a", as[i].a);
42		test("as[i].b", as[i].b);
43		test("as[i].c", as[i].c);
44
45		test("cs[i].a", cs[i].a);
46		test("cs[i].b", cs[i].b);
47		test("cs[i].c", cs[i].c);
48
49		test("ms[i].a", ms[i].a);
50		test("ms[i].b", ms[i].b);
51		test("ms[i].c", ms[i].c);
52
53		test("sa.a[i]", sa.a[i]);
54		test("sa.b[i]", sa.b[i]);
55		test("sa.c[i]", sa.c[i]);
56
57		test("sc.a[i]", sc.a[i]);
58		test("sc.b[i]", sc.b[i]);
59		test("sc.c[i]", sc.c[i]);
60
61		test("sm.a[i]", sm.a[i]);
62		test("sm.b[i]", sm.b[i]);
63		test("sm.c[i]", sm.c[i]);
64
65		for j:=0; j<3; j++ {
66			test("aa[i][j]", aa[i][j]);
67			test("ac[i][j]", ac[i][j]);
68			test("am[i][j]", am[i][j]);
69			test("ca[i][j]", ca[i][j]);
70			test("cc[i][j]", cc[i][j]);
71			test("cm[i][j]", cm[i][j]);
72			test("ma[i][j]", ma[i][j]);
73			test("mc[i][j]", mc[i][j]);
74			test("mm[i][j]", mm[i][j]);
75		}
76	}
77
78}
79
80var	ref	= 0;
81
82func
83test(xs string, x int) {
84
85	if ref >= len(answers) {
86		println(xs, x);
87		return;
88	}
89
90	if x != answers[ref] {
91		println(xs, "is", x, "should be", answers[ref])
92	}
93	ref++;
94}
95
96
97var	a	= [3]int{1001, 1002, 1003}
98var	s	= S{1101, 1102, 1103}
99var	c	= []int{1201, 1202, 1203}
100var	m	= M{0:1301, 1:1302, 2:1303}
101
102var	aa	= [3][3]int{[3]int{2001,2002,2003}, [3]int{2004,2005,2006}, [3]int{2007,2008,2009}}
103var	as	= [3]S{S{2101,2102,2103},S{2104,2105,2106},S{2107,2108,2109}}
104var	ac	= [3][]int{[]int{2201,2202,2203}, []int{2204,2205,2206}, []int{2207,2208,2209}}
105var	am	= [3]M{M{0:2301,1:2302,2:2303}, M{0:2304,1:2305,2:2306}, M{0:2307,1:2308,2:2309}}
106
107var	sa	= SA{[3]int{3001,3002,3003},[3]int{3004,3005,3006},[3]int{3007,3008,3009}}
108var	ss	= SS{S{3101,3102,3103},S{3104,3105,3106},S{3107,3108,3109}}
109var	sc	= SC{[]int{3201,3202,3203},[]int{3204,3205,3206},[]int{3207,3208,3209}}
110var	sm	= SM{M{0:3301,1:3302,2:3303}, M{0:3304,1:3305,2:3306}, M{0:3307,1:3308,2:3309}}
111
112var	ca	= [][3]int{[3]int{4001,4002,4003}, [3]int{4004,4005,4006}, [3]int{4007,4008,4009}}
113var	cs	= []S{S{4101,4102,4103},S{4104,4105,4106},S{4107,4108,4109}}
114var	cc	= [][]int{[]int{4201,4202,4203}, []int{4204,4205,4206}, []int{4207,4208,4209}}
115var	cm	= []M{M{0:4301,1:4302,2:4303}, M{0:4304,1:4305,2:4306}, M{0:4307,1:4308,2:4309}}
116
117var	ma	= map[int][3]int{0:[3]int{5001,5002,5003}, 1:[3]int{5004,5005,5006}, 2:[3]int{5007,5008,5009}}
118var	ms	= map[int]S{0:S{5101,5102,5103},1:S{5104,5105,5106},2:S{5107,5108,5109}}
119var	mc	= map[int][]int{0:[]int{5201,5202,5203}, 1:[]int{5204,5205,5206}, 2:[]int{5207,5208,5209}}
120var	mm	= map[int]M{0:M{0:5301,1:5302,2:5303}, 1:M{0:5304,1:5305,2:5306}, 2:M{0:5307,1:5308,2:5309}}
121
122var	answers	= [...]int {
123	// s
124	1101, 1102, 1103,
125
126	// ss
127	3101, 3102, 3103,
128	3104, 3105, 3106,
129	3107, 3108, 3109,
130
131	// [0]
132	1001, 1201, 1301,
133	2101, 2102, 2103,
134	4101, 4102, 4103,
135	5101, 5102, 5103,
136	3001, 3004, 3007,
137	3201, 3204, 3207,
138	3301, 3304, 3307,
139
140	// [0][j]
141	2001, 2201, 2301, 4001, 4201, 4301, 5001, 5201, 5301,
142	2002, 2202, 2302, 4002, 4202, 4302, 5002, 5202, 5302,
143	2003, 2203, 2303, 4003, 4203, 4303, 5003, 5203, 5303,
144
145	// [1]
146	1002, 1202, 1302,
147	2104, 2105, 2106,
148	4104, 4105, 4106,
149	5104, 5105, 5106,
150	3002, 3005, 3008,
151	3202, 3205, 3208,
152	3302, 3305, 3308,
153
154	// [1][j]
155	2004, 2204, 2304, 4004, 4204, 4304, 5004, 5204, 5304,
156	2005, 2205, 2305, 4005, 4205, 4305, 5005, 5205, 5305,
157	2006, 2206, 2306, 4006, 4206, 4306, 5006, 5206, 5306,
158
159	// [2]
160	1003, 1203, 1303,
161	2107, 2108, 2109,
162	4107, 4108, 4109,
163	5107, 5108, 5109,
164	3003, 3006, 3009,
165	3203, 3206, 3209,
166	3303, 3306, 3309,
167
168	// [2][j]
169	2007, 2207, 2307, 4007, 4207, 4307, 5007, 5207, 5307,
170	2008, 2208, 2308, 4008, 4208, 4308, 5008, 5208, 5308,
171	2009, 2209, 2309, 4009, 4209, 4309, 5009, 5209, 5309,
172}
173