44 lines
567 B
Go

package ratecounter
import (
"sync"
"testing"
)
func TestCounter(t *testing.T) {
var c Counter
check := func(expected int64) {
val := c.Value()
if val != expected {
t.Error("Expected ", val, " to equal ", expected)
}
}
check(0)
c.Incr(1)
check(1)
c.Incr(9)
check(10)
// Concurrent usage
wg := &sync.WaitGroup{}
wg.Add(3)
for i := 1; i <= 3; i++ {
go func(val int64) {
c.Incr(val)
wg.Done()
}(int64(i))
}
wg.Wait()
check(16)
}
func BenchmarkCounter(b *testing.B) {
var c Counter
for i := 0; i < b.N; i++ {
c.Incr(1)
}
}