| // 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 ( |
| "internal/testenv" |
| "os" |
| "strings" |
| "testing" |
| ) |
| |
| func common(t *testing.T, dir, what, failWith string) { |
| t.Helper() |
| t.Logf("subprocess test in testdata") |
| testenv.MustHaveGoRun(t) |
| args := []string{"test", "-C", dir} |
| if testing.Verbose() { |
| args = append(args, "-v") |
| } |
| args = append(args, what) |
| cmd := testenv.Command(t, testenv.GoToolPath(t), args...) |
| |
| goexp := os.Getenv("GOEXPERIMENT") |
| if !strings.Contains(","+goexp+",", ",simd,") { |
| if goexp != "" { |
| goexp += "," |
| } |
| goexp += "simd" |
| } |
| cmd.Env = append(cmd.Environ(), "GOEXPERIMENT="+goexp) |
| |
| if failWith == "" { |
| cmd.Stdout = os.Stdout |
| cmd.Stderr = os.Stderr |
| if err := cmd.Run(); err != nil { |
| t.Error(err) |
| } |
| } else { |
| combined, err := cmd.CombinedOutput() |
| combinedString := string(combined) |
| sawFailure := strings.Contains(combinedString, failWith) |
| if err == nil && !sawFailure { |
| t.Errorf("Saw no error and did not see expected failure string '%s' in '%s'", failWith, combinedString) |
| } else if err == nil && sawFailure { |
| t.Errorf("Saw no error but did see expected failure string '%s'", failWith) |
| } else if err != nil && !sawFailure { |
| t.Errorf("Saw error %v but did see expected failure string '%s' in '%s'", err, failWith, combinedString) |
| } else /* err != nil && sawFailure */ { |
| t.Logf("Saw error %v and expected failure string '%s'", err, failWith) |
| } |
| } |
| } |
| func TestIFace(t *testing.T) { |
| common(t, "testdata", "iface_test.go", "") |
| } |
| |
| func TestSizeof(t *testing.T) { |
| common(t, "testdata", "sizeof_test.go", "") |
| } |
| |
| func TestCompileOk(t *testing.T) { |
| common(t, "testdata", "compiles_test.go", "") |
| } |
| |
| func TestCompileError(t *testing.T) { |
| common(t, "testdata", "errors_test.go", |
| "array length unsafe.Sizeof(v_from_simd) (value of type uintptr) must be constant") |
| } |