// 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 && arm64 package simd_test import ( "simd/archsimd" "testing" ) func TestReduceSum(t *testing.T) { testInt8x16Reduce(t, archsimd.Int8x16.ReduceSum, func(x []int8) int8 { return reduceSlice(x, add[int8]) }) testInt16x8Reduce(t, archsimd.Int16x8.ReduceSum, func(x []int16) int16 { return reduceSlice(x, add[int16]) }) testInt32x4Reduce(t, archsimd.Int32x4.ReduceSum, func(x []int32) int32 { return reduceSlice(x, add[int32]) }) testUint8x16Reduce(t, archsimd.Uint8x16.ReduceSum, func(x []uint8) uint8 { return reduceSlice(x, add[uint8]) }) testUint16x8Reduce(t, archsimd.Uint16x8.ReduceSum, func(x []uint16) uint16 { return reduceSlice(x, add[uint16]) }) testUint32x4Reduce(t, archsimd.Uint32x4.ReduceSum, func(x []uint32) uint32 { return reduceSlice(x, add[uint32]) }) } func TestReduceMax(t *testing.T) { testInt8x16Reduce(t, archsimd.Int8x16.ReduceMax, func(x []int8) int8 { return reduceSlice(x, max_[int8]) }) testInt16x8Reduce(t, archsimd.Int16x8.ReduceMax, func(x []int16) int16 { return reduceSlice(x, max_[int16]) }) testInt32x4Reduce(t, archsimd.Int32x4.ReduceMax, func(x []int32) int32 { return reduceSlice(x, max_[int32]) }) testUint8x16Reduce(t, archsimd.Uint8x16.ReduceMax, func(x []uint8) uint8 { return reduceSlice(x, max_[uint8]) }) testUint16x8Reduce(t, archsimd.Uint16x8.ReduceMax, func(x []uint16) uint16 { return reduceSlice(x, max_[uint16]) }) testUint32x4Reduce(t, archsimd.Uint32x4.ReduceMax, func(x []uint32) uint32 { return reduceSlice(x, max_[uint32]) }) testFloat32x4Reduce(t, archsimd.Float32x4.ReduceMax, func(x []float32) float32 { return reduceSlice(x, max_[float32]) }) } func TestReduceMin(t *testing.T) { testInt8x16Reduce(t, archsimd.Int8x16.ReduceMin, func(x []int8) int8 { return reduceSlice(x, min_[int8]) }) testInt16x8Reduce(t, archsimd.Int16x8.ReduceMin, func(x []int16) int16 { return reduceSlice(x, min_[int16]) }) testInt32x4Reduce(t, archsimd.Int32x4.ReduceMin, func(x []int32) int32 { return reduceSlice(x, min_[int32]) }) testUint8x16Reduce(t, archsimd.Uint8x16.ReduceMin, func(x []uint8) uint8 { return reduceSlice(x, min_[uint8]) }) testUint16x8Reduce(t, archsimd.Uint16x8.ReduceMin, func(x []uint16) uint16 { return reduceSlice(x, min_[uint16]) }) testUint32x4Reduce(t, archsimd.Uint32x4.ReduceMin, func(x []uint32) uint32 { return reduceSlice(x, min_[uint32]) }) testFloat32x4Reduce(t, archsimd.Float32x4.ReduceMin, func(x []float32) float32 { return reduceSlice(x, min_[float32]) }) }