// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn . package syncutils_test import ( syncutils "github.com/TeaOSLab/EdgeNode/internal/utils/sync" "runtime" "sync" "sync/atomic" "testing" ) func TestNewCounter(t *testing.T) { var counter = syncutils.NewCounter[uint64]() counter.Add(1) counter.Add(2) var wg = sync.WaitGroup{} wg.Add(1024) for i := 0; i < 1024; i++ { go func() { defer wg.Done() counter.Add(1) }() } wg.Wait() t.Log(counter.Load()) } func BenchmarkCounter_Add(b *testing.B) { runtime.GOMAXPROCS(128) var counter = syncutils.NewCounter[int64]() b.ResetTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { counter.Add(1) counter.Load() } }) } func BenchmarkCounter_Add_Atomic(b *testing.B) { runtime.GOMAXPROCS(128) var value int64 b.ResetTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { atomic.AddInt64(&value, 1) } }) }