package metrics import ( "testing" "time" ) func BenchmarkMeter(b *testing.B) { m := NewMeter() b.ResetTimer() for i := 0; i < b.N; i++ { m.Mark(1) } } func TestGetOrRegisterMeter(t *testing.T) { r := NewRegistry() NewRegisteredMeter("foo", r).Mark(47) if m := GetOrRegisterMeter("foo", r); 47 != m.Count() { t.Fatal(m) } } func TestMeterDecay(t *testing.T) { ma := meterArbiter{ ticker: time.NewTicker(1), } m := newStandardMeter() ma.meters = append(ma.meters, m) go ma.tick() m.Mark(1) rateMean := m.RateMean() time.Sleep(1) if m.RateMean() >= rateMean { t.Error("m.RateMean() didn't decrease") } } func TestMeterNonzero(t *testing.T) { m := NewMeter() m.Mark(3) if count := m.Count(); 3 != count { t.Errorf("m.Count(): 3 != %v\n", count) } } func TestMeterSnapshot(t *testing.T) { m := NewMeter() m.Mark(1) if snapshot := m.Snapshot(); m.RateMean() != snapshot.RateMean() { t.Fatal(snapshot) } } func TestMeterZero(t *testing.T) { m := NewMeter() if count := m.Count(); 0 != count { t.Errorf("m.Count(): 0 != %v\n", count) } }