Fix for PR c/59825.
[official-gcc.git] / libgo / go / time / tick_test.go
blobd8a086ceb2548725c90ecd670571386d185d435e
1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 package time_test
7 import (
8 "testing"
9 . "time"
12 func TestTicker(t *testing.T) {
13 const Count = 10
14 Delta := 100 * Millisecond
15 ticker := NewTicker(Delta)
16 t0 := Now()
17 for i := 0; i < Count; i++ {
18 <-ticker.C
20 ticker.Stop()
21 t1 := Now()
22 dt := t1.Sub(t0)
23 target := Delta * Count
24 slop := target * 2 / 10
25 if dt < target-slop || (!testing.Short() && dt > target+slop) {
26 t.Fatalf("%d %s ticks took %s, expected [%s,%s]", Count, Delta, dt, target-slop, target+slop)
28 // Now test that the ticker stopped
29 Sleep(2 * Delta)
30 select {
31 case <-ticker.C:
32 t.Fatal("Ticker did not shut down")
33 default:
34 // ok
38 // Test that a bug tearing down a ticker has been fixed. This routine should not deadlock.
39 func TestTeardown(t *testing.T) {
40 Delta := 100 * Millisecond
41 if testing.Short() {
42 Delta = 20 * Millisecond
44 for i := 0; i < 3; i++ {
45 ticker := NewTicker(Delta)
46 <-ticker.C
47 ticker.Stop()
51 func BenchmarkTicker(b *testing.B) {
52 ticker := NewTicker(1)
53 b.ResetTimer()
54 b.StartTimer()
55 for i := 0; i < b.N; i++ {
56 <-ticker.C
58 b.StopTimer()
59 ticker.Stop()