aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/time/sleep_test.go
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2015-10-31 00:59:47 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2015-10-31 00:59:47 +0000
commitaf146490bb04205107cb23e301ec7a8ff927b5fc (patch)
tree13beeaed3698c61903fe93fb1ce70bd9b18d4e7f /libgo/go/time/sleep_test.go
parent725e1be3406315d9bcc8195d7eef0a7082b3c7cc (diff)
downloadgcc-af146490bb04205107cb23e301ec7a8ff927b5fc.zip
gcc-af146490bb04205107cb23e301ec7a8ff927b5fc.tar.gz
gcc-af146490bb04205107cb23e301ec7a8ff927b5fc.tar.bz2
runtime: Remove now unnecessary pad field from ParFor.
It is not needed due to the removal of the ctx field. Reviewed-on: https://go-review.googlesource.com/16525 From-SVN: r229616
Diffstat (limited to 'libgo/go/time/sleep_test.go')
-rw-r--r--libgo/go/time/sleep_test.go41
1 files changed, 24 insertions, 17 deletions
diff --git a/libgo/go/time/sleep_test.go b/libgo/go/time/sleep_test.go
index c21eb99..c286bd0 100644
--- a/libgo/go/time/sleep_test.go
+++ b/libgo/go/time/sleep_test.go
@@ -8,7 +8,6 @@ import (
"errors"
"fmt"
"runtime"
- "sort"
"strings"
"sync"
"sync/atomic"
@@ -224,10 +223,11 @@ func TestAfterStop(t *testing.T) {
func TestAfterQueuing(t *testing.T) {
// This test flakes out on some systems,
// so we'll try it a few times before declaring it a failure.
- const attempts = 3
+ const attempts = 5
err := errors.New("!=nil")
for i := 0; i < attempts && err != nil; i++ {
- if err = testAfterQueuing(t); err != nil {
+ delta := Duration(20+i*50) * Millisecond
+ if err = testAfterQueuing(t, delta); err != nil {
t.Logf("attempt %v failed: %v", i, err)
}
}
@@ -248,11 +248,7 @@ func await(slot int, result chan<- afterResult, ac <-chan Time) {
result <- afterResult{slot, <-ac}
}
-func testAfterQueuing(t *testing.T) error {
- Delta := 100 * Millisecond
- if testing.Short() {
- Delta = 20 * Millisecond
- }
+func testAfterQueuing(t *testing.T, delta Duration) error {
// make the result channel buffered because we don't want
// to depend on channel queueing semantics that might
// possibly change in the future.
@@ -260,18 +256,25 @@ func testAfterQueuing(t *testing.T) error {
t0 := Now()
for _, slot := range slots {
- go await(slot, result, After(Duration(slot)*Delta))
+ go await(slot, result, After(Duration(slot)*delta))
}
- sort.Ints(slots)
- for _, slot := range slots {
+ var order []int
+ var times []Time
+ for range slots {
r := <-result
- if r.slot != slot {
- return fmt.Errorf("after slot %d, expected %d", r.slot, slot)
+ order = append(order, r.slot)
+ times = append(times, r.t)
+ }
+ for i := range order {
+ if i > 0 && order[i] < order[i-1] {
+ return fmt.Errorf("After calls returned out of order: %v", order)
}
- dt := r.t.Sub(t0)
- target := Duration(slot) * Delta
- if dt < target-Delta/2 || dt > target+Delta*10 {
- return fmt.Errorf("After(%s) arrived at %s, expected [%s,%s]", target, dt, target-Delta/2, target+Delta*10)
+ }
+ for i, t := range times {
+ dt := t.Sub(t0)
+ target := Duration(order[i]) * delta
+ if dt < target-delta/2 || dt > target+delta*10 {
+ return fmt.Errorf("After(%s) arrived at %s, expected [%s,%s]", target, dt, target-delta/2, target+delta*10)
}
}
return nil
@@ -384,6 +387,10 @@ func TestOverflowSleep(t *testing.T) {
// Test that a panic while deleting a timer does not leave
// the timers mutex held, deadlocking a ticker.Stop in a defer.
func TestIssue5745(t *testing.T) {
+ if runtime.GOOS == "darwin" && runtime.GOARCH == "arm" {
+ t.Skipf("skipping on %s/%s, see issue 10043", runtime.GOOS, runtime.GOARCH)
+ }
+
ticker := NewTicker(Hour)
defer func() {
// would deadlock here before the fix due to