| // Copyright 2026 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. |
| |
| //go:build goexperiment.simd |
| |
| package simd_test |
| |
| import ( |
| "simd" |
| "testing" |
| ) |
| |
| func variadicAny(xs ...any) int { |
| _ = simd.BroadcastUint8s(0) |
| return len(xs) |
| } |
| |
| func variadicInt(xs ...int) int { |
| _ = simd.BroadcastUint8s(0) |
| sum := 0 |
| for _, x := range xs { |
| sum += x |
| } |
| return sum |
| } |
| |
| func variadicAfterFixed(base int, xs ...int) int { |
| _ = simd.BroadcastUint8s(0) |
| return base + len(xs) |
| } |
| |
| func TestMidwayVariadicDispatch(t *testing.T) { |
| // An "any" element type is the interesting case: a []any slice is |
| // assignable to an any parameter, so dropping the "..." is not a type |
| // error and the wrong count is returned instead. |
| if got := variadicAny(1, 2, 3); got != 3 { |
| t.Errorf("variadicAny(1, 2, 3) = %d, want 3", got) |
| } |
| if got := variadicAny(); got != 0 { |
| t.Errorf("variadicAny() = %d, want 0", got) |
| } |
| if got := variadicInt(1, 2, 3); got != 6 { |
| t.Errorf("variadicInt(1, 2, 3) = %d, want 6", got) |
| } |
| if got := variadicInt([]int{4, 5}...); got != 9 { |
| t.Errorf("variadicInt([]int{4, 5}...) = %d, want 9", got) |
| } |
| if got := variadicAfterFixed(10, 1, 2); got != 12 { |
| t.Errorf("variadicAfterFixed(10, 1, 2) = %d, want 12", got) |
| } |
| } |