github.com/rcrowley/go-metrics@v0.0.0-20201227073835-cf1acfcdf475/gauge_test.go (about) 1 package metrics 2 3 import ( 4 "fmt" 5 "math/rand" 6 "sync" 7 "testing" 8 "time" 9 ) 10 11 func BenchmarkGuage(b *testing.B) { 12 g := NewGauge() 13 b.ResetTimer() 14 for i := 0; i < b.N; i++ { 15 g.Update(int64(i)) 16 } 17 } 18 19 // exercise race detector 20 func TestGaugeConcurrency(t *testing.T) { 21 rand.Seed(time.Now().Unix()) 22 g := NewGauge() 23 wg := &sync.WaitGroup{} 24 reps := 100 25 for i := 0; i < reps; i++ { 26 wg.Add(1) 27 go func(g Gauge, wg *sync.WaitGroup) { 28 g.Update(rand.Int63()) 29 wg.Done() 30 }(g, wg) 31 } 32 wg.Wait() 33 } 34 35 func TestGauge(t *testing.T) { 36 g := NewGauge() 37 g.Update(int64(47)) 38 if v := g.Value(); 47 != v { 39 t.Errorf("g.Value(): 47 != %v\n", v) 40 } 41 } 42 43 func TestGaugeSnapshot(t *testing.T) { 44 g := NewGauge() 45 g.Update(int64(47)) 46 snapshot := g.Snapshot() 47 g.Update(int64(0)) 48 if v := snapshot.Value(); 47 != v { 49 t.Errorf("g.Value(): 47 != %v\n", v) 50 } 51 } 52 53 func TestGetOrRegisterGauge(t *testing.T) { 54 r := NewRegistry() 55 NewRegisteredGauge("foo", r).Update(47) 56 if g := GetOrRegisterGauge("foo", r); 47 != g.Value() { 57 t.Fatal(g) 58 } 59 } 60 61 func TestFunctionalGauge(t *testing.T) { 62 var counter int64 63 fg := NewFunctionalGauge(func() int64 { 64 counter++ 65 return counter 66 }) 67 fg.Value() 68 fg.Value() 69 if counter != 2 { 70 t.Error("counter != 2") 71 } 72 } 73 74 func TestGetOrRegisterFunctionalGauge(t *testing.T) { 75 r := NewRegistry() 76 NewRegisteredFunctionalGauge("foo", r, func() int64 { return 47 }) 77 if g := GetOrRegisterGauge("foo", r); 47 != g.Value() { 78 t.Fatal(g) 79 } 80 } 81 82 func ExampleGetOrRegisterGauge() { 83 m := "server.bytes_sent" 84 g := GetOrRegisterGauge(m, nil) 85 g.Update(47) 86 fmt.Println(g.Value()) // Output: 47 87 }