package bps import ( "bytes" "io" "log" "testing" "time" ) func init() { log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) } func TestSimple(t *testing.T) { bw, err := New(1 * time.Second) if err != nil { t.Fatalf("failure to make reasonable BPS: %v", err) } bw.Close() } func TestBadResolution(t *testing.T) { var i uint for i = 0; i < minResolution; i++ { _, err := NewPrecise(1*time.Second, i) if err == nil { t.Fatalf("expected an error, got nil for %d", i) } } } func TestWriter(t *testing.T) { t.Parallel() bw, err := New(1 * time.Second) if err != nil { t.Fatalf("failure to make reasonable BPS: %v", err) } b := &bytes.Buffer{} b.Write([]byte("helloooooooooooooooooooooooooooooooooooooooooooooo")) for i := 0; i < 90; i++ { io.Copy(bw, b) last := bw.Rate() time.Sleep(10 * time.Millisecond) if last > bw.Rate() { t.Errorf("rate should be increasing, it isn't: last: %f > current: %f", last, bw.Rate()) } } time.Sleep(2 * time.Second) for i := 0; i < 100; i++ { if bw.Rate() > 0 { t.Errorf("got high rate: got %f, want 0.0000", bw.Rate()) } time.Sleep(9 * time.Millisecond) } bw.Close() } func TestAdd(t *testing.T) { t.Parallel() bw, err := New(1 * time.Second) if err != nil { t.Fatalf("failure to make reasonable BPS: %v", err) } for i := 0; i < 90; i++ { bw.Add(1024) last := bw.Rate() time.Sleep(10 * time.Millisecond) if last > bw.Rate() { t.Errorf("rate should be increasing, it isn't: last: %f > current: %f", last, bw.Rate()) } } time.Sleep(2 * time.Second) for i := 0; i < 100; i++ { if bw.Rate() > 0 { t.Errorf("got high rate: got %v, want 0.0000", bw.Rate()) } time.Sleep(9 * time.Millisecond) } bw.Close() } func TestHumanBytes(t *testing.T) { t.Parallel() bw, err := NewPrecise(100*time.Second, 10) if err != nil { t.Fatalf("failure to make reasonable BPS: %v", err) } bw.Add(1000) got := bw.HumanRate() want := "10B/s" if got != want { t.Fatalf("did not get right human rate; got %v, want %v", got, want) } }