| // Copyright 2025 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package test | |
| import "testing" | |
| var ( | |
| n = [16]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} | |
| m = [16]int{2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32} | |
| ) | |
| func TestEqual(t *testing.T) { | |
| if r := move2(n, m, 0); r != n { | |
| t.Fatalf("%v != %v", r, n) | |
| } | |
| if r := move2(n, m, 1); r != m { | |
| t.Fatalf("%v != %v", r, m) | |
| } | |
| if r := move2p(n, m, 0); r != n { | |
| t.Fatalf("%v != %v", r, n) | |
| } | |
| if r := move2p(n, m, 1); r != m { | |
| t.Fatalf("%v != %v", r, m) | |
| } | |
| } | |
| //go:noinline | |
| func move2(a, b [16]int, c int) [16]int { | |
| e := a | |
| f := b | |
| var d [16]int | |
| if c%2 == 0 { | |
| d = e | |
| } else { | |
| d = f | |
| } | |
| r := d | |
| return r | |
| } | |
| //go:noinline | |
| func move2p(a, b [16]int, c int) [16]int { | |
| e := a | |
| f := b | |
| var p *[16]int | |
| if c%2 == 0 { | |
| p = &e | |
| } else { | |
| p = &f | |
| } | |
| r := *p | |
| return r | |
| } |