1 // Copyright 2013 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
11 func TestMemmove(t
*testing
.T
) {
16 src
:= make([]byte, size
)
17 dst
:= make([]byte, size
)
18 for i
:= 0; i
< size
; i
++ {
19 src
[i
] = byte(128 + (i
& 127))
21 for i
:= 0; i
< size
; i
++ {
22 dst
[i
] = byte(i
& 127)
24 for n
:= 0; n
<= size
; n
++ {
25 for x
:= 0; x
<= size
-n
; x
++ { // offset in src
26 for y
:= 0; y
<= size
-n
; y
++ { // offset in dst
27 copy(dst
[y
:y
+n
], src
[x
:x
+n
])
28 for i
:= 0; i
< y
; i
++ {
29 if dst
[i
] != byte(i
&127) {
30 t
.Fatalf("prefix dst[%d] = %d", i
, dst
[i
])
33 for i
:= y
; i
< y
+n
; i
++ {
34 if dst
[i
] != byte(128+((i
-y
+x
)&127)) {
35 t
.Fatalf("copied dst[%d] = %d", i
, dst
[i
])
37 dst
[i
] = byte(i
& 127) // reset dst
39 for i
:= y
+ n
; i
< size
; i
++ {
40 if dst
[i
] != byte(i
&127) {
41 t
.Fatalf("suffix dst[%d] = %d", i
, dst
[i
])
49 func TestMemmoveAlias(t
*testing
.T
) {
54 buf
:= make([]byte, size
)
55 for i
:= 0; i
< size
; i
++ {
58 for n
:= 0; n
<= size
; n
++ {
59 for x
:= 0; x
<= size
-n
; x
++ { // src offset
60 for y
:= 0; y
<= size
-n
; y
++ { // dst offset
61 copy(buf
[y
:y
+n
], buf
[x
:x
+n
])
62 for i
:= 0; i
< y
; i
++ {
63 if buf
[i
] != byte(i
) {
64 t
.Fatalf("prefix buf[%d] = %d", i
, buf
[i
])
67 for i
:= y
; i
< y
+n
; i
++ {
68 if buf
[i
] != byte(i
-y
+x
) {
69 t
.Fatalf("copied buf[%d] = %d", i
, buf
[i
])
71 buf
[i
] = byte(i
) // reset buf
73 for i
:= y
+ n
; i
< size
; i
++ {
74 if buf
[i
] != byte(i
) {
75 t
.Fatalf("suffix buf[%d] = %d", i
, buf
[i
])
83 func bmMemmove(n
int, b
*testing
.B
) {
87 for i
:= 0; i
< b
.N
; i
++ {
92 func BenchmarkMemmove0(b
*testing
.B
) { bmMemmove(0, b
) }
93 func BenchmarkMemmove1(b
*testing
.B
) { bmMemmove(1, b
) }
94 func BenchmarkMemmove2(b
*testing
.B
) { bmMemmove(2, b
) }
95 func BenchmarkMemmove3(b
*testing
.B
) { bmMemmove(3, b
) }
96 func BenchmarkMemmove4(b
*testing
.B
) { bmMemmove(4, b
) }
97 func BenchmarkMemmove5(b
*testing
.B
) { bmMemmove(5, b
) }
98 func BenchmarkMemmove6(b
*testing
.B
) { bmMemmove(6, b
) }
99 func BenchmarkMemmove7(b
*testing
.B
) { bmMemmove(7, b
) }
100 func BenchmarkMemmove8(b
*testing
.B
) { bmMemmove(8, b
) }
101 func BenchmarkMemmove9(b
*testing
.B
) { bmMemmove(9, b
) }
102 func BenchmarkMemmove10(b
*testing
.B
) { bmMemmove(10, b
) }
103 func BenchmarkMemmove11(b
*testing
.B
) { bmMemmove(11, b
) }
104 func BenchmarkMemmove12(b
*testing
.B
) { bmMemmove(12, b
) }
105 func BenchmarkMemmove13(b
*testing
.B
) { bmMemmove(13, b
) }
106 func BenchmarkMemmove14(b
*testing
.B
) { bmMemmove(14, b
) }
107 func BenchmarkMemmove15(b
*testing
.B
) { bmMemmove(15, b
) }
108 func BenchmarkMemmove16(b
*testing
.B
) { bmMemmove(16, b
) }
109 func BenchmarkMemmove32(b
*testing
.B
) { bmMemmove(32, b
) }
110 func BenchmarkMemmove64(b
*testing
.B
) { bmMemmove(64, b
) }
111 func BenchmarkMemmove128(b
*testing
.B
) { bmMemmove(128, b
) }
112 func BenchmarkMemmove256(b
*testing
.B
) { bmMemmove(256, b
) }
113 func BenchmarkMemmove512(b
*testing
.B
) { bmMemmove(512, b
) }
114 func BenchmarkMemmove1024(b
*testing
.B
) { bmMemmove(1024, b
) }
115 func BenchmarkMemmove2048(b
*testing
.B
) { bmMemmove(2048, b
) }
116 func BenchmarkMemmove4096(b
*testing
.B
) { bmMemmove(4096, b
) }