package peerstore import ( "fmt" "math/rand" "testing" "time" "github.com/libp2p/go-libp2p/core/test" ) func TestLatencyEWMAFun(t *testing.T) { t.Skip("run it for fun") m := NewMetrics() id, err := test.RandPeerID() if err != nil { t.Fatal(err) } mu := 100.0 sig := 10.0 next := func() time.Duration { mu = (rand.NormFloat64() * sig) + mu return time.Duration(mu) } print := func() { fmt.Printf("%3.f %3.f --> %d\n", sig, mu, m.LatencyEWMA(id)) } for { time.Sleep(200 * time.Millisecond) m.RecordLatency(id, next()) print() } } func TestLatencyEWMA(t *testing.T) { m := NewMetrics() id, err := test.RandPeerID() if err != nil { t.Fatal(err) } const exp = 100 const mu = exp const sig = 10 next := func() time.Duration { return time.Duration(rand.Intn(20) - 10 + mu) } for i := 0; i < 10; i++ { m.RecordLatency(id, next()) } lat := m.LatencyEWMA(id) diff := exp - lat if diff < 0 { diff = -diff } if diff > sig { t.Fatalf("latency outside of expected range. expected %d ± %d, got %d", exp, sig, lat) } }