From f0fb5737fd6437c5776e8c5c25563e355f0ceef3 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Wed, 24 Jun 2026 04:51:05 +0000 Subject: internal/progress: Concurrent --- internal/progress/meter_test.go | 47 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 internal/progress/meter_test.go (limited to 'internal/progress/meter_test.go') diff --git a/internal/progress/meter_test.go b/internal/progress/meter_test.go new file mode 100644 index 00000000..62b489e3 --- /dev/null +++ b/internal/progress/meter_test.go @@ -0,0 +1,47 @@ +package progress_test + +import ( + "bytes" + "strings" + "sync" + "testing" + "time" + + "lindenii.org/go/furgit/internal/progress" + "lindenii.org/go/lgo/iowrap" +) + +func TestMeterConcurrentAdd(t *testing.T) { + t.Parallel() + + var buf bytes.Buffer + + meter := progress.New(progress.Options{ + Writer: iowrap.NopFlush(&buf), + Title: "test", + Total: 1000, + }) + + var wg sync.WaitGroup + + for range 10 { + wg.Add(1) + + go func() { + defer wg.Done() + + for range 100 { + meter.Add(1, 0) + time.Sleep(time.Millisecond) + } + }() + } + + wg.Wait() + + meter.Stop("done") + + if got := buf.String(); !strings.Contains(got, "100% (1000/1000)") { + t.Fatalf("final line = %q, want it to contain %q", got, "100% (1000/1000)") + } +} -- cgit v1.3.1-10-gc9f91