test: migrate remaining tests to run.go
* bug248, bug345, bug369, and bug429 were ported from bash commands to run scripts. bug369 remains disabled.
* bug395 is a test for issue 1909, which is still open. It is marked as skip now and will be usable with compile with run.go when issue 1909 is fixed.
Fixes #4139
Updates #1909
Change-Id: Ibb5fbfb5cf72ddc285829245318eeacd3fb5a636
Reviewed-on: https://go-review.googlesource.com/1774
Reviewed-by: Russ Cox <rsc@golang.org>
diff --git a/test/fixedbugs/bug248.go b/test/fixedbugs/bug248.go
index 98cda35..338bc8e 100644
--- a/test/fixedbugs/bug248.go
+++ b/test/fixedbugs/bug248.go
@@ -1,15 +1,56 @@
-// $G $D/$F.dir/bug0.go &&
-// $G $D/$F.dir/bug1.go &&
-// $G $D/$F.dir/bug2.go &&
-// errchk $G -e $D/$F.dir/bug3.go &&
-// $L bug2.$A &&
-// ./$A.out || echo BUG: failed to compile
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// +build !nacl
+// run
// Copyright 2009 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.
-ignored
+package main
+
+import (
+ "fmt"
+ "go/build"
+ "os"
+ "os/exec"
+ "path/filepath"
+)
+
+func main() {
+ a, err := build.ArchChar(build.Default.GOARCH)
+ check(err)
+
+ errchk, err := filepath.Abs("errchk")
+ check(err)
+
+ err = os.Chdir(filepath.Join("fixedbugs", "bug248.dir"))
+ check(err)
+
+ run("go", "tool", a+"g", "bug0.go")
+ run("go", "tool", a+"g", "bug1.go")
+ run("go", "tool", a+"g", "bug2.go")
+ run(errchk, "go", "tool", a+"g", "-e", "bug3.go")
+ run("go", "tool", a+"l", "bug2."+a)
+ run(fmt.Sprintf(".%c%s.out", filepath.Separator, a))
+
+ os.Remove("bug0." + a)
+ os.Remove("bug1." + a)
+ os.Remove("bug2." + a)
+ os.Remove(a + ".out")
+}
+
+func run(name string, args ...string) {
+ cmd := exec.Command(name, args...)
+ out, err := cmd.CombinedOutput()
+ if err != nil {
+ fmt.Println(string(out))
+ fmt.Println(err)
+ os.Exit(1)
+ }
+}
+
+func check(err error) {
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+}
diff --git a/test/fixedbugs/bug345.go b/test/fixedbugs/bug345.go
index e3705f6..e772d86 100644
--- a/test/fixedbugs/bug345.go
+++ b/test/fixedbugs/bug345.go
@@ -1,10 +1,48 @@
-// $G $D/$F.dir/io.go && errchk $G -e $D/$F.dir/main.go
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// +build !nacl
+// run
// Copyright 2011 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.
-package ignored
+package main
+
+import (
+ "fmt"
+ "go/build"
+ "os"
+ "os/exec"
+ "path/filepath"
+)
+
+func main() {
+ a, err := build.ArchChar(build.Default.GOARCH)
+ check(err)
+
+ errchk, err := filepath.Abs("errchk")
+ check(err)
+
+ err = os.Chdir(filepath.Join(".", "fixedbugs", "bug345.dir"))
+ check(err)
+
+ run("go", "tool", a+"g", "io.go")
+ run(errchk, "go", "tool", a+"g", "-e", "main.go")
+ os.Remove("io." + a)
+}
+
+func run(name string, args ...string) {
+ cmd := exec.Command(name, args...)
+ out, err := cmd.CombinedOutput()
+ if err != nil {
+ fmt.Println(string(out))
+ fmt.Println(err)
+ os.Exit(1)
+ }
+}
+
+func check(err error) {
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+}
diff --git a/test/fixedbugs/bug369.dir/main.go b/test/fixedbugs/bug369.dir/main.go
new file mode 100644
index 0000000..1c9e36b
--- /dev/null
+++ b/test/fixedbugs/bug369.dir/main.go
@@ -0,0 +1,54 @@
+// Copyright 2011 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.
+
+package main
+
+import (
+ "flag"
+ "os"
+ "runtime"
+ "testing"
+
+ fast "./fast"
+ slow "./slow"
+)
+
+var buf = make([]byte, 1048576)
+
+func BenchmarkFastNonASCII(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ fast.NonASCII(buf, 0)
+ }
+}
+
+func BenchmarkSlowNonASCII(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ slow.NonASCII(buf, 0)
+ }
+}
+
+func main() {
+ os.Args = []string{os.Args[0], "-test.benchtime=100ms"}
+ flag.Parse()
+
+ rslow := testing.Benchmark(BenchmarkSlowNonASCII)
+ rfast := testing.Benchmark(BenchmarkFastNonASCII)
+ tslow := rslow.NsPerOp()
+ tfast := rfast.NsPerOp()
+
+ // Optimization should be good for at least 2x, but be forgiving.
+ // On the ARM simulator we see closer to 1.5x.
+ speedup := float64(tslow) / float64(tfast)
+ want := 1.8
+ if runtime.GOARCH == "arm" {
+ want = 1.3
+ }
+ if speedup < want {
+ // TODO(rsc): doesn't work on linux-amd64 or darwin-amd64 builders, nor on
+ // a Lenovo x200 (linux-amd64) laptop.
+ // println("fast:", tfast, "slow:", tslow, "speedup:", speedup, "want:", want)
+ // println("not fast enough")
+ // os.Exit(1)
+ }
+}
diff --git a/test/fixedbugs/bug369.go b/test/fixedbugs/bug369.go
index 6d52622..8cb2bf0 100644
--- a/test/fixedbugs/bug369.go
+++ b/test/fixedbugs/bug369.go
@@ -1,10 +1,6 @@
-// $G -N -o slow.$A $D/bug369.dir/pkg.go &&
-// $G -o fast.$A $D/bug369.dir/pkg.go &&
+// +build !nacl
// run
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
-
// Copyright 2011 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.
@@ -14,49 +10,45 @@
package main
import (
- "flag"
+ "fmt"
+ "go/build"
"os"
- "runtime"
- "testing"
-
- fast "./fast"
- slow "./slow"
+ "os/exec"
+ "path/filepath"
)
-var buf = make([]byte, 1048576)
-
-func BenchmarkFastNonASCII(b *testing.B) {
- for i := 0; i < b.N; i++ {
- fast.NonASCII(buf, 0)
- }
-}
-
-func BenchmarkSlowNonASCII(b *testing.B) {
- for i := 0; i < b.N; i++ {
- slow.NonASCII(buf, 0)
- }
-}
-
func main() {
- os.Args = []string{os.Args[0], "-test.benchtime=100ms"}
- flag.Parse()
+ a, err := build.ArchChar(build.Default.GOARCH)
+ check(err)
- rslow := testing.Benchmark(BenchmarkSlowNonASCII)
- rfast := testing.Benchmark(BenchmarkFastNonASCII)
- tslow := rslow.NsPerOp()
- tfast := rfast.NsPerOp()
+ err = os.Chdir(filepath.Join(".", "fixedbugs", "bug369.dir"))
+ check(err)
- // Optimization should be good for at least 2x, but be forgiving.
- // On the ARM simulator we see closer to 1.5x.
- speedup := float64(tslow)/float64(tfast)
- want := 1.8
- if runtime.GOARCH == "arm" {
- want = 1.3
+ run("go", "tool", a+"g", "-N", "-o", "slow."+a, "pkg.go")
+ run("go", "tool", a+"g", "-o", "fast."+a, "pkg.go")
+ run("go", "tool", a+"g", "-o", "main."+a, "main.go")
+ run("go", "tool", a+"l", "-o", "a.exe", "main."+a)
+ run("." + string(filepath.Separator) + "a.exe")
+
+ os.Remove("slow." + a)
+ os.Remove("fast." + a)
+ os.Remove("main." + a)
+ os.Remove("a.exe")
+}
+
+func run(name string, args ...string) {
+ cmd := exec.Command(name, args...)
+ out, err := cmd.CombinedOutput()
+ if err != nil {
+ fmt.Println(string(out))
+ fmt.Println(err)
+ os.Exit(1)
}
- if speedup < want {
- // TODO(rsc): doesn't work on linux-amd64 or darwin-amd64 builders, nor on
- // a Lenovo x200 (linux-amd64) laptop.
- //println("fast:", tfast, "slow:", tslow, "speedup:", speedup, "want:", want)
- //println("not fast enough")
+}
+
+func check(err error) {
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
}
}
diff --git a/test/fixedbugs/bug429.go b/test/fixedbugs/bug429.go
index 794d293..31d5a3a 100644
--- a/test/fixedbugs/bug429.go
+++ b/test/fixedbugs/bug429.go
@@ -1,13 +1,11 @@
-// $G $D/$F.go && $L $F.$A && ! ./$A.out || echo BUG: bug429
-
-// NOTE: This test is not run by 'run.go' and so not run by all.bash.
-// To run this test you must use the ./run shell script.
+// skip
// Copyright 2012 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.
// Should print deadlock message, not hang.
+// This test is run by bug429_run.go.
package main
diff --git a/test/fixedbugs/bug429_run.go b/test/fixedbugs/bug429_run.go
new file mode 100644
index 0000000..284033d1
--- /dev/null
+++ b/test/fixedbugs/bug429_run.go
@@ -0,0 +1,34 @@
+// +build !nacl
+// run
+
+// Copyright 2014 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.
+
+// Run the bug429.go test.
+
+package main
+
+import (
+ "fmt"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "strings"
+)
+
+func main() {
+ cmd := exec.Command("go", "run", filepath.Join("fixedbugs", "bug429.go"))
+ out, err := cmd.CombinedOutput()
+ if err == nil {
+ fmt.Println("expected deadlock")
+ os.Exit(1)
+ }
+
+ want := "fatal error: all goroutines are asleep - deadlock!"
+ got := string(out)
+ if !strings.Contains(got, want) {
+ fmt.Printf("got:\n%q\nshould contain:\n%q\n", got, want)
+ os.Exit(1)
+ }
+}