run tests partially in parallel

Этот коммит содержится в:
Jaden Weiss 2019-12-20 17:13:00 -05:00 коммит произвёл Ron Evans
родитель ec2658ca79
коммит 525ded3d90

Просмотреть файл

@ -12,6 +12,7 @@ import (
"path/filepath" "path/filepath"
"runtime" "runtime"
"sort" "sort"
"sync"
"testing" "testing"
"github.com/tinygo-org/tinygo/compileopts" "github.com/tinygo-org/tinygo/compileopts"
@ -67,6 +68,8 @@ func TestCompiler(t *testing.T) {
} }
func runPlatTests(target string, matches []string, t *testing.T) { func runPlatTests(target string, matches []string, t *testing.T) {
t.Parallel()
for _, path := range matches { for _, path := range matches {
switch { switch {
case target == "wasm": case target == "wasm":
@ -86,11 +89,25 @@ func runPlatTests(target string, matches []string, t *testing.T) {
} }
t.Run(filepath.Base(path), func(t *testing.T) { t.Run(filepath.Base(path), func(t *testing.T) {
t.Parallel()
runTest(path, target, t) runTest(path, target, t)
}) })
} }
} }
// Due to some problems with LLD, we cannot run links in parallel, or in parallel with compiles.
// Therefore, we put a lock around builds and run everything else in parallel.
var buildLock sync.Mutex
// runBuild is a thread-safe wrapper around Build.
func runBuild(src, out string, opts *compileopts.Options) error {
buildLock.Lock()
defer buildLock.Unlock()
return Build(src, out, opts)
}
func runTest(path, target string, t *testing.T) { func runTest(path, target string, t *testing.T) {
// Get the expected output for this test. // Get the expected output for this test.
txtpath := path[:len(path)-3] + ".txt" txtpath := path[:len(path)-3] + ".txt"
@ -130,7 +147,7 @@ func runTest(path, target string, t *testing.T) {
WasmAbi: "js", WasmAbi: "js",
} }
binary := filepath.Join(tmpdir, "test") binary := filepath.Join(tmpdir, "test")
err = Build("./"+path, binary, config) err = runBuild("./"+path, binary, config)
if err != nil { if err != nil {
if errLoader, ok := err.(loader.Errors); ok { if errLoader, ok := err.(loader.Errors); ok {
for _, err := range errLoader.Errs { for _, err := range errLoader.Errs {