github.com/netdata/go.d.plugin@v0.58.1/pkg/metrics/counter_test.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package metrics 4 5 import ( 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestCounter_WriteTo(t *testing.T) { 12 c := Counter{} 13 c.Inc() 14 c.Inc() 15 c.Inc() 16 c.Add(0.14) 17 m := map[string]int64{} 18 c.WriteTo(m, "pi", 100, 1) 19 assert.Len(t, m, 1) 20 assert.EqualValues(t, 314, m["pi"]) 21 } 22 23 func TestCounterVec_WriteTo(t *testing.T) { 24 c := NewCounterVec() 25 c.Get("foo").Inc() 26 c.Get("foo").Inc() 27 c.Get("bar").Inc() 28 c.Get("bar").Add(0.14) 29 30 m := map[string]int64{} 31 c.WriteTo(m, "pi", 100, 1) 32 assert.Len(t, m, 2) 33 assert.EqualValues(t, 200, m["pi_foo"]) 34 assert.EqualValues(t, 114, m["pi_bar"]) 35 } 36 37 func TestCounter_Inc(t *testing.T) { 38 c := Counter{} 39 c.Inc() 40 assert.Equal(t, 1.0, c.Value()) 41 c.Inc() 42 assert.Equal(t, 2.0, c.Value()) 43 } 44 45 func TestCounter_Add(t *testing.T) { 46 c := Counter{} 47 c.Add(3.14) 48 assert.InDelta(t, 3.14, c.Value(), 0.0001) 49 c.Add(2) 50 assert.InDelta(t, 5.14, c.Value(), 0.0001) 51 assert.Panics(t, func() { 52 c.Add(-1) 53 }) 54 } 55 56 func BenchmarkCounter_Add(b *testing.B) { 57 benchmarks := []struct { 58 name string 59 value float64 60 }{ 61 {"int", 1}, 62 {"float", 3.14}, 63 } 64 for _, bm := range benchmarks { 65 b.Run(bm.name, func(b *testing.B) { 66 var c Counter 67 for i := 0; i < b.N; i++ { 68 c.Add(bm.value) 69 } 70 }) 71 } 72 } 73 74 func BenchmarkCounter_Inc(b *testing.B) { 75 var c Counter 76 for i := 0; i < b.N; i++ { 77 c.Inc() 78 } 79 } 80 81 func BenchmarkCounterVec_Inc(b *testing.B) { 82 c := NewCounterVec() 83 for i := 0; i < b.N; i++ { 84 c.Get("foo").Inc() 85 } 86 } 87 88 func BenchmarkCounter_Value(b *testing.B) { 89 var c Counter 90 c.Inc() 91 c.Add(3.14) 92 for i := 0; i < b.N; i++ { 93 c.Value() 94 } 95 } 96 97 func BenchmarkCounter_WriteTo(b *testing.B) { 98 var c Counter 99 c.Inc() 100 c.Add(3.14) 101 m := map[string]int64{} 102 for i := 0; i < b.N; i++ { 103 c.WriteTo(m, "pi", 100, 1) 104 } 105 }