diff --git a/barbench_test.go b/barbench_test.go new file mode 100644 index 0000000..b93a1c3 --- /dev/null +++ b/barbench_test.go @@ -0,0 +1,42 @@ +package mpb + +import ( + "io/ioutil" + "testing" +) + +func benchmarkSingleBar(total int) { + p := New(Output(ioutil.Discard)) + bar := p.AddBar(int64(total)) + for i := 0; i < total; i++ { + bar.Increment() + } + p.Stop() +} + +func BenchmarkSingleBar100(b *testing.B) { + for i := 0; i < b.N; i++ { + benchmarkSingleBar(100) + } +} + +func BenchmarkSingleBar1000(b *testing.B) { + for i := 0; i < b.N; i++ { + benchmarkSingleBar(1000) + } +} + +func BenchmarkSingleBar10000(b *testing.B) { + for i := 0; i < b.N; i++ { + benchmarkSingleBar(10000) + } +} + +func BenchmarkIncrSingleBar(b *testing.B) { + p := New(Output(ioutil.Discard)) + bar := p.AddBar(int64(b.N)) + for i := 0; i < b.N; i++ { + bar.Increment() + } + p.Stop() +} diff --git a/examples/panic/main.go b/examples/panic/main.go new file mode 100644 index 0000000..1a0e8ea --- /dev/null +++ b/examples/panic/main.go @@ -0,0 +1,41 @@ +package main + +import ( + "fmt" + "sync" + "time" + + "github.com/vbauerster/mpb" + "github.com/vbauerster/mpb/decor" +) + +func main() { + var wg sync.WaitGroup + p := mpb.New(mpb.WithWaitGroup(&wg)) + + wantPanic := "Upps!!!" + numBars := 3 + wg.Add(numBars) + + for i := 0; i < numBars; i++ { + name := fmt.Sprintf("b#%02d:", i) + bar := p.AddBar(100, mpb.BarID(i), mpb.PrependDecorators( + func(s *decor.Statistics, _ chan<- int, _ <-chan int) string { + if s.ID == 2 && s.Current >= 42 { + panic(wantPanic) + } + return name + }, + )) + + go func() { + defer wg.Done() + for i := 0; i < 100; i++ { + time.Sleep(10 * time.Millisecond) + bar.Increment() + } + }() + } + + p.Stop() +}