1 // $G $F.go && $L $F.$A && ./$A.out
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.
7 // Semi-exhaustive test for copy()
18 var input8 = make([]uint8, N)
19 var output8 = make([]uint8, N)
20 var input16 = make([]uint16, N)
21 var output16 = make([]uint16, N)
22 var input32 = make([]uint32, N)
23 var output32 = make([]uint32, N)
24 var input64 = make([]uint64, N)
25 var output64 = make([]uint64, N)
27 func u8(i int) uint8 {
32 func u16(ii int) uint16 {
39 func u32(ii int) uint32 {
47 func u64(ii int) uint64 {
59 for i := range input8 {
63 output16[i] = u16(out);
65 output32[i] = u32(out);
67 output64[i] = u64(out);
73 func clamp(n int) int {
80 func doAllSlices(length, in, out int) {
82 copy(output8[out:clamp(out+length)], input8[in:clamp(in+length)]);
83 verify8(length, in, out);
84 copy(output16[out:clamp(out+length)], input16[in:clamp(in+length)]);
85 verify16(length, in, out);
86 copy(output32[out:clamp(out+length)], input32[in:clamp(in+length)]);
87 verify32(length, in, out);
88 copy(output64[out:clamp(out+length)], input64[in:clamp(in+length)]);
89 verify64(length, in, out);
92 func bad8(state string, i, length, in, out int) {
93 fmt.Printf("%s bad(%d %d %d): %c not %c:\n\t%s\n\t%s\n",
102 func verify8(length, in, out int) {
103 for i := 0; i < out; i++ {
104 if output8[i] != u8(i+13) {
105 bad8("preamble8", i, length, in, out);
111 func bad16(state string, i, length, in, out int) {
112 fmt.Printf("%s bad(%d %d %d): %x not %x:\n\t%v\n\t%v\n",
121 func verify16(length, in, out int) {
122 for i := 0; i < out; i++ {
123 if output16[i] != u16(i+13) {
124 bad16("preamble16", i, length, in, out);
130 func bad32(state string, i, length, in, out int) {
131 fmt.Printf("%s bad(%d %d %d): %x not %x:\n\t%v\n\t%v\n",
140 func verify32(length, in, out int) {
141 for i := 0; i < out; i++ {
142 if output32[i] != u32(i+13) {
143 bad32("preamble32", i, length, in, out);
149 func bad64(state string, i, length, in, out int) {
150 fmt.Printf("%s bad(%d %d %d): %x not %x:\n\t%v\n\t%v\n",
159 func verify64(length, in, out int) {
160 for i := 0; i < out; i++ {
161 if output64[i] != u64(i+13) {
162 bad64("preamble64", i, length, in, out);
169 for length := 0; length < N; length++ {
170 for in := 0; in <= 32; in++ {
171 for out := 0; out <= 32; out++ {
172 doAllSlices(length, in, out)
178 // Array test. Can be much simpler. It's mostly checking for promotion of *[N] to []
182 copy(&array, input8);
183 for i := 0; i < N; i++ {
186 copy(output8, &array);