| // 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 |
| } |