| // Copyright 2022 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 rate_test |
| |
| import ( |
| "fmt" |
| "math" |
| "testing" |
| "time" |
| |
| "golang.org/x/time/rate" |
| ) |
| |
| func ExampleSometimes_once() { |
| // The zero value of Sometimes behaves like sync.Once, though less efficiently. |
| var s rate.Sometimes |
| s.Do(func() { fmt.Println("1") }) |
| s.Do(func() { fmt.Println("2") }) |
| s.Do(func() { fmt.Println("3") }) |
| // Output: |
| // 1 |
| } |
| |
| func ExampleSometimes_first() { |
| s := rate.Sometimes{First: 2} |
| s.Do(func() { fmt.Println("1") }) |
| s.Do(func() { fmt.Println("2") }) |
| s.Do(func() { fmt.Println("3") }) |
| // Output: |
| // 1 |
| // 2 |
| } |
| |
| func ExampleSometimes_every() { |
| s := rate.Sometimes{Every: 2} |
| s.Do(func() { fmt.Println("1") }) |
| s.Do(func() { fmt.Println("2") }) |
| s.Do(func() { fmt.Println("3") }) |
| // Output: |
| // 1 |
| // 3 |
| } |
| |
| func ExampleSometimes_interval() { |
| s := rate.Sometimes{Interval: 1 * time.Second} |
| s.Do(func() { fmt.Println("1") }) |
| s.Do(func() { fmt.Println("2") }) |
| time.Sleep(1 * time.Second) |
| s.Do(func() { fmt.Println("3") }) |
| // Output: |
| // 1 |
| // 3 |
| } |
| |
| func ExampleSometimes_mix() { |
| s := rate.Sometimes{ |
| First: 2, |
| Every: 2, |
| Interval: 2 * time.Second, |
| } |
| s.Do(func() { fmt.Println("1 (First:2)") }) |
| s.Do(func() { fmt.Println("2 (First:2)") }) |
| s.Do(func() { fmt.Println("3 (Every:2)") }) |
| time.Sleep(2 * time.Second) |
| s.Do(func() { fmt.Println("4 (Interval)") }) |
| s.Do(func() { fmt.Println("5 (Every:2)") }) |
| s.Do(func() { fmt.Println("6") }) |
| // Output: |
| // 1 (First:2) |
| // 2 (First:2) |
| // 3 (Every:2) |
| // 4 (Interval) |
| // 5 (Every:2) |
| } |
| |
| func TestSometimesZero(t *testing.T) { |
| s := rate.Sometimes{Interval: 0} |
| s.Do(func() {}) |
| s.Do(func() {}) |
| } |
| |
| func TestSometimesMax(t *testing.T) { |
| s := rate.Sometimes{Interval: math.MaxInt64} |
| s.Do(func() {}) |
| s.Do(func() {}) |
| } |
| |
| func TestSometimesNegative(t *testing.T) { |
| s := rate.Sometimes{Interval: -1} |
| s.Do(func() {}) |
| s.Do(func() {}) |
| } |