PR middle-end/81768
[official-gcc.git] / libgo / go / time / tick_test.go
blob2ab77f60255fe06878e3f3bbb6f5736e5bdc79bf
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 // Test the Tick convenience wrapper.
52 func TestTick(t *testing.T) {
53 // Test that giving a negative duration returns nil.
54 if got := Tick(-1); got != nil {
55 t.Errorf("Tick(-1) = %v; want nil", got)
59 // Test that NewTicker panics when given a duration less than zero.
60 func TestNewTickerLtZeroDuration(t *testing.T) {
61 defer func() {
62 if err := recover(); err == nil {
63 t.Errorf("NewTicker(-1) should have panicked")
65 }()
66 NewTicker(-1)
69 func BenchmarkTicker(b *testing.B) {
70 ticker := NewTicker(1)
71 b.ResetTimer()
72 b.StartTimer()
73 for i := 0; i < b.N; i++ {
74 <-ticker.C
76 b.StopTimer()
77 ticker.Stop()