Skip to content

Commit

Permalink
test: migrate remaining tests to run.go
Browse files Browse the repository at this point in the history
* 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 golang#4139

Updates golang#1909

Change-Id: Ibb5fbfb5cf72ddc285829245318eeacd3fb5a636
  • Loading branch information
josharian committed Dec 22, 2014
1 parent 5f029de commit 866f56d
Show file tree
Hide file tree
Showing 10 changed files with 222 additions and 239 deletions.
7 changes: 3 additions & 4 deletions test/bugs/bug395.go
@@ -1,15 +1,14 @@
// echo bug395 is broken # takes 90+ seconds to break
// # $G $D/$F.go || echo bug395
// skip

// 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.
// When issue 1909 is fixed, change from skip to compile.

// 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.

// Issue 1909
// Would OOM due to exponential recursion on Foo's expanded methodset in nodefmt

package test

type Foo interface {
Expand Down
61 changes: 51 additions & 10 deletions 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)
}
}
48 changes: 43 additions & 5 deletions 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)
}
}
54 changes: 54 additions & 0 deletions 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)
}
}
74 changes: 33 additions & 41 deletions 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.
Expand All @@ -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 main() {
a, err := build.ArchChar(build.Default.GOARCH)
check(err)

err = os.Chdir(filepath.Join(".", "fixedbugs", "bug369.dir"))
check(err)

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 BenchmarkSlowNonASCII(b *testing.B) {
for i := 0; i < b.N; i++ {
slow.NonASCII(buf, 0)
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 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")
func check(err error) {
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
6 changes: 2 additions & 4 deletions 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

Expand Down
34 changes: 34 additions & 0 deletions 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)
}
}
24 changes: 0 additions & 24 deletions test/golden.out

This file was deleted.

0 comments on commit 866f56d

Please sign in to comment.