1
2
3
4
5
6
7 package test_helpers
8
9 import "testing"
10
11 func TestMaskAllAny[E integer, V interface {
12 Len() int
13 Equal(V) M
14 NotEqual(V) M
15 }, M interface {
16 All() bool
17 Any() bool
18 None() bool
19 TrailingZeros() int
20 }](t *testing.T, load func([]E) V) {
21 t.Helper()
22 var zero V
23 lanes := zero.Len()
24 a := make([]E, lanes)
25 b := make([]E, lanes)
26 for i := range lanes {
27 a[i] = E(i % 2)
28 b[i] = E(i % 3)
29 }
30 b[1] = 0
31 va := load(a)
32 vb := load(b)
33 m := va.Equal(vb)
34 if m.All() {
35 t.Errorf("m.All(): want false, got true")
36 }
37 if !m.Any() {
38 t.Errorf("m.Any(): want true, got false")
39 }
40 if m.None() {
41 t.Errorf("m.None(): want false, got true")
42 }
43 mAllOnes := va.Equal(va)
44 if !mAllOnes.All() {
45 t.Errorf("mAllOnes.All(): want true, got false")
46 }
47 if !mAllOnes.Any() {
48 t.Errorf("mAllOnes.Any(): want true, got false")
49 }
50 if mAllOnes.None() {
51 t.Errorf("mAllOnes.None(): want false, got true")
52 }
53 if got := mAllOnes.TrailingZeros(); got != 0 {
54 t.Errorf("mAllOnes.TrailingZeros(): want 0, got %d", got)
55 }
56 mAllZeros := va.NotEqual(va)
57 if mAllZeros.All() {
58 t.Errorf("mAllZeros.All(): want false, got true")
59 }
60 if mAllZeros.Any() {
61 t.Errorf("mAllZeros.Any(): want false, got true")
62 }
63 if !mAllZeros.None() {
64 t.Errorf("mAllZeros.None(): want true, got false")
65 }
66 if got := mAllZeros.TrailingZeros(); got != lanes {
67 t.Errorf("mAllZeros.TrailingZeros(): want %d, got %d", lanes, got)
68 }
69 vz := load(make([]E, lanes))
70 for i := range lanes {
71 s1 := make([]E, lanes)
72 s1[i] = 1
73 m1 := load(s1).NotEqual(vz)
74 if m1.All() {
75 t.Errorf("single-1 lane %d All: want false, got true", i)
76 }
77 if !m1.Any() {
78 t.Errorf("single-1 lane %d Any: want true, got false", i)
79 }
80 if m1.None() {
81 t.Errorf("single-1 lane %d None: want false, got true", i)
82 }
83 if got := m1.TrailingZeros(); got != i {
84 t.Errorf("single-1 lane %d TrailingZeros: want %d, got %d", i, i, got)
85 }
86 s0 := make([]E, lanes)
87 for j := range lanes {
88 if j != i {
89 s0[j] = 1
90 }
91 }
92 m0 := load(s0).NotEqual(vz)
93 if m0.All() {
94 t.Errorf("single-0 lane %d All: want false, got true", i)
95 }
96 if !m0.Any() {
97 t.Errorf("single-0 lane %d Any: want true, got false", i)
98 }
99 if m0.None() {
100 t.Errorf("single-0 lane %d None: want false, got true", i)
101 }
102 wantTZ := 0
103 if i == 0 {
104 wantTZ = 1
105 }
106 if got := m0.TrailingZeros(); got != wantTZ {
107 t.Errorf("single-0 lane %d TrailingZeros: want %d, got %d", i, wantTZ, got)
108 }
109 }
110 }
111
View as plain text