blob: 05f2fc699c5f8a18f873c9c1e912164751fe4528 [file]
// 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.
package simdref_test
import (
"fmt"
"simd/internal/simdref"
"simd/internal/spec"
"testing"
)
func TestScalableExecution(t *testing.T) {
// Calling scalable operation before setting width must panic
func() {
defer func() {
if r := recover(); r == nil {
t.Fatalf("expected panic on LoadInt8s when scalable width unset, but did not panic")
}
}()
sUnset := make([]int8, 16)
simdref.LoadInt8s(sUnset)
}()
// Test at two different scalable widths
for _, width := range []int{128, 256} {
t.Run(fmt.Sprint(width), func(t *testing.T) {
s1 := make([]int8, width/8)
s2 := make([]int8, width/8)
for i := range s1 {
s1[i] = int8(i)
s2[i] = 10
}
out := make([]int8, width/8)
defer spec.SetScalableWidth(width)()
x := simdref.LoadInt8s(s1)
y := simdref.LoadInt8s(s2)
z := x.Add(y)
z.Store(out)
for i := range out {
if out[i] != int8(i)+10 {
t.Fatalf("out[%d] = %d, want %d", i, out[i], int8(i)+10)
}
}
})
}
}