github.com/embeddedgo/x@v0.0.6-0.20191217015414-d79a36f562e7/time/tick_test.go (about) 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. 4 5 package time_test 6 7 import ( 8 "testing" 9 . "github.com/embeddedgo/x/time" 10 ) 11 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 19 } 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) 27 } 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 35 } 36 } 37 38 // Issue 21874 39 func TestTickerStopWithDirectInitialization(t *testing.T) { 40 c := make(chan Time) 41 tk := &Ticker{C: c} 42 tk.Stop() 43 } 44 45 // Test that a bug tearing down a ticker has been fixed. This routine should not deadlock. 46 func TestTeardown(t *testing.T) { 47 Delta := 100 * Millisecond 48 if testing.Short() { 49 Delta = 20 * Millisecond 50 } 51 for i := 0; i < 3; i++ { 52 ticker := NewTicker(Delta) 53 <-ticker.C 54 ticker.Stop() 55 } 56 } 57 58 // Test the Tick convenience wrapper. 59 func TestTick(t *testing.T) { 60 // Test that giving a negative duration returns nil. 61 if got := Tick(-1); got != nil { 62 t.Errorf("Tick(-1) = %v; want nil", got) 63 } 64 } 65 66 // Test that NewTicker panics when given a duration less than zero. 67 func TestNewTickerLtZeroDuration(t *testing.T) { 68 defer func() { 69 if err := recover(); err == nil { 70 t.Errorf("NewTicker(-1) should have panicked") 71 } 72 }() 73 NewTicker(-1) 74 } 75 76 func BenchmarkTicker(b *testing.B) { 77 benchmark(b, func(n int) { 78 ticker := NewTicker(Nanosecond) 79 for i := 0; i < n; i++ { 80 <-ticker.C 81 } 82 ticker.Stop() 83 }) 84 }