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 basic operations of slices and arrays.
8
9package main
10
11var bx [10]byte
12var by []byte
13var fx [10]float64
14var fy []float64
15var lb, hb int
16var t int
17
18func main() {
19	lb = 0
20	hb = 10
21	by = bx[0:]
22	tstb()
23
24	lb = 0
25	hb = 10
26	fy = fx[0:]
27	tstf()
28
29	// width 1 (byte)
30	lb = 0
31	hb = 10
32	by = bx[lb:hb]
33	tstb()
34	by = bx[lb:10]
35	tstb()
36	by = bx[lb:]
37	tstb()
38	by = bx[:hb]
39	tstb()
40	by = bx[0:hb]
41	tstb()
42	by = bx[0:10]
43	tstb()
44	by = bx[0:]
45	tstb()
46	by = bx[:10]
47	tstb()
48	by = bx[:]
49	tstb()
50
51	lb = 2
52	hb = 10
53	by = bx[lb:hb]
54	tstb()
55	by = bx[lb:10]
56	tstb()
57	by = bx[lb:]
58	tstb()
59	by = bx[2:hb]
60	tstb()
61	by = bx[2:10]
62	tstb()
63	by = bx[2:]
64	tstb()
65
66	lb = 0
67	hb = 8
68	by = bx[lb:hb]
69	tstb()
70	by = bx[lb:8]
71	tstb()
72	by = bx[0:hb]
73	tstb()
74	by = bx[0:8]
75	tstb()
76	by = bx[:8]
77	tstb()
78	by = bx[:hb]
79	tstb()
80
81	lb = 2
82	hb = 8
83	by = bx[lb:hb]
84	tstb()
85	by = bx[lb:8]
86	tstb()
87	by = bx[2:hb]
88	tstb()
89	by = bx[2:8]
90	tstb()
91
92	// width 4 (float64)
93	lb = 0
94	hb = 10
95	fy = fx[lb:hb]
96	tstf()
97	fy = fx[lb:10]
98	tstf()
99	fy = fx[lb:]
100	tstf()
101	fy = fx[:hb]
102	tstf()
103	fy = fx[0:hb]
104	tstf()
105	fy = fx[0:10]
106	tstf()
107	fy = fx[0:]
108	tstf()
109	fy = fx[:10]
110	tstf()
111	fy = fx[:]
112	tstf()
113
114	lb = 2
115	hb = 10
116	fy = fx[lb:hb]
117	tstf()
118	fy = fx[lb:10]
119	tstf()
120	fy = fx[lb:]
121	tstf()
122	fy = fx[2:hb]
123	tstf()
124	fy = fx[2:10]
125	tstf()
126	fy = fx[2:]
127	tstf()
128
129	lb = 0
130	hb = 8
131	fy = fx[lb:hb]
132	tstf()
133	fy = fx[lb:8]
134	tstf()
135	fy = fx[:hb]
136	tstf()
137	fy = fx[0:hb]
138	tstf()
139	fy = fx[0:8]
140	tstf()
141	fy = fx[:8]
142	tstf()
143
144	lb = 2
145	hb = 8
146	fy = fx[lb:hb]
147	tstf()
148	fy = fx[lb:8]
149	tstf()
150	fy = fx[2:hb]
151	tstf()
152	fy = fx[2:8]
153	tstf()
154}
155
156func tstb() {
157	t++
158	if len(by) != hb-lb {
159		println("t=", t, "lb=", lb, "hb=", hb,
160			"len=", len(by), "hb-lb=", hb-lb)
161		panic("fail")
162	}
163	if cap(by) != len(bx)-lb {
164		println("t=", t, "lb=", lb, "hb=", hb,
165			"cap=", cap(by), "len(bx)-lb=", len(bx)-lb)
166		panic("fail")
167	}
168	for i := lb; i < hb; i++ {
169		if bx[i] != by[i-lb] {
170			println("t=", t, "lb=", lb, "hb=", hb,
171				"bx[", i, "]=", bx[i],
172				"by[", i-lb, "]=", by[i-lb])
173			panic("fail")
174		}
175	}
176	by = nil
177}
178
179func tstf() {
180	t++
181	if len(fy) != hb-lb {
182		println("t=", t, "lb=", lb, "hb=", hb,
183			"len=", len(fy), "hb-lb=", hb-lb)
184		panic("fail")
185	}
186	if cap(fy) != len(fx)-lb {
187		println("t=", t, "lb=", lb, "hb=", hb,
188			"cap=", cap(fy), "len(fx)-lb=", len(fx)-lb)
189		panic("fail")
190	}
191	for i := lb; i < hb; i++ {
192		if fx[i] != fy[i-lb] {
193			println("t=", t, "lb=", lb, "hb=", hb,
194				"fx[", i, "]=", fx[i],
195				"fy[", i-lb, "]=", fy[i-lb])
196			panic("fail")
197		}
198	}
199	fy = nil
200}
201
202func init() {
203	for i := 0; i < len(bx); i++ {
204		bx[i] = byte(i + 20)
205	}
206	by = nil
207
208	for i := 0; i < len(fx); i++ {
209		fx[i] = float64(i + 20)
210	}
211	fy = nil
212}
213