Source file src/simd/archsimd/internal/simd_test/reduce_arm64_helpers_test.go

     1  // Code generated by 'tmplgen'; DO NOT EDIT.
     2  
     3  //go:build goexperiment.simd && arm64
     4  
     5  // This file contains functions testing simd reduce methods.
     6  // Each function in this file is specialized for a
     7  // particular simd type <BaseType><Width>x<Count>.
     8  
     9  package simd_test
    10  
    11  import (
    12  	"math"
    13  	"simd/archsimd"
    14  	"testing"
    15  )
    16  
    17  func testInt8x16Reduce(t *testing.T, f func(_ archsimd.Int8x16) int8, want func(_ []int8) int8) {
    18  	n := 16
    19  	t.Helper()
    20  	forSlice(t, int8s, n, func(x []int8) bool {
    21  		t.Helper()
    22  		a := archsimd.LoadInt8x16(x)
    23  		g := f(a)
    24  		w := want(x)
    25  		if g != w {
    26  			t.Errorf("got %v, want %v, input %v", g, w, x)
    27  			return false
    28  		}
    29  		return true
    30  	})
    31  }
    32  
    33  func testInt16x8Reduce(t *testing.T, f func(_ archsimd.Int16x8) int16, want func(_ []int16) int16) {
    34  	n := 8
    35  	t.Helper()
    36  	forSlice(t, int16s, n, func(x []int16) bool {
    37  		t.Helper()
    38  		a := archsimd.LoadInt16x8(x)
    39  		g := f(a)
    40  		w := want(x)
    41  		if g != w {
    42  			t.Errorf("got %v, want %v, input %v", g, w, x)
    43  			return false
    44  		}
    45  		return true
    46  	})
    47  }
    48  
    49  func testInt32x4Reduce(t *testing.T, f func(_ archsimd.Int32x4) int32, want func(_ []int32) int32) {
    50  	n := 4
    51  	t.Helper()
    52  	forSlice(t, int32s, n, func(x []int32) bool {
    53  		t.Helper()
    54  		a := archsimd.LoadInt32x4(x)
    55  		g := f(a)
    56  		w := want(x)
    57  		if g != w {
    58  			t.Errorf("got %v, want %v, input %v", g, w, x)
    59  			return false
    60  		}
    61  		return true
    62  	})
    63  }
    64  
    65  func testUint8x16Reduce(t *testing.T, f func(_ archsimd.Uint8x16) uint8, want func(_ []uint8) uint8) {
    66  	n := 16
    67  	t.Helper()
    68  	forSlice(t, uint8s, n, func(x []uint8) bool {
    69  		t.Helper()
    70  		a := archsimd.LoadUint8x16(x)
    71  		g := f(a)
    72  		w := want(x)
    73  		if g != w {
    74  			t.Errorf("got %v, want %v, input %v", g, w, x)
    75  			return false
    76  		}
    77  		return true
    78  	})
    79  }
    80  
    81  func testUint16x8Reduce(t *testing.T, f func(_ archsimd.Uint16x8) uint16, want func(_ []uint16) uint16) {
    82  	n := 8
    83  	t.Helper()
    84  	forSlice(t, uint16s, n, func(x []uint16) bool {
    85  		t.Helper()
    86  		a := archsimd.LoadUint16x8(x)
    87  		g := f(a)
    88  		w := want(x)
    89  		if g != w {
    90  			t.Errorf("got %v, want %v, input %v", g, w, x)
    91  			return false
    92  		}
    93  		return true
    94  	})
    95  }
    96  
    97  func testUint32x4Reduce(t *testing.T, f func(_ archsimd.Uint32x4) uint32, want func(_ []uint32) uint32) {
    98  	n := 4
    99  	t.Helper()
   100  	forSlice(t, uint32s, n, func(x []uint32) bool {
   101  		t.Helper()
   102  		a := archsimd.LoadUint32x4(x)
   103  		g := f(a)
   104  		w := want(x)
   105  		if g != w {
   106  			t.Errorf("got %v, want %v, input %v", g, w, x)
   107  			return false
   108  		}
   109  		return true
   110  	})
   111  }
   112  
   113  func testFloat32x4Reduce(t *testing.T, f func(_ archsimd.Float32x4) float32, want func(_ []float32) float32) {
   114  	n := 4
   115  	t.Helper()
   116  	forSlice(t, float32s, n, func(x []float32) bool {
   117  		t.Helper()
   118  		a := archsimd.LoadFloat32x4(x)
   119  		g := f(a)
   120  		w := want(x)
   121  		if g != w && !(math.IsNaN(float64(g)) && math.IsNaN(float64(w))) {
   122  			t.Errorf("got %v, want %v, input %v", g, w, x)
   123  			return false
   124  		}
   125  		return true
   126  	})
   127  }
   128  

View as plain text