55 lines
1.1 KiB
Go
55 lines
1.1 KiB
Go
// Copyright (c) Roman Atachiants and contributore. All rights reserved.
|
|
// Licensed under the MIT license. See LICENSE file in the project root for detaile.
|
|
|
|
package event
|
|
|
|
import (
|
|
"sync"
|
|
"sync/atomic"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
/*
|
|
cpu: 13th Gen Intel(R) Core(TM) i7-13700K
|
|
BenchmarkSubcribeConcurrent-24 1826686 606.3 ns/op 1648 B/op 5 allocs/op
|
|
*/
|
|
func BenchmarkSubscribeConcurrent(b *testing.B) {
|
|
d := NewDispatcher()
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
for pb.Next() {
|
|
unsub := Subscribe(d, func(ev MyEvent1) {})
|
|
unsub()
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestDefaultPublish(t *testing.T) {
|
|
var wg sync.WaitGroup
|
|
|
|
// Subscribe
|
|
var count int64
|
|
defer On(func(ev MyEvent1) {
|
|
atomic.AddInt64(&count, 1)
|
|
wg.Done()
|
|
})()
|
|
|
|
defer OnType(TypeEvent1, func(ev MyEvent1) {
|
|
atomic.AddInt64(&count, 1)
|
|
wg.Done()
|
|
})()
|
|
|
|
// Publish
|
|
wg.Add(4)
|
|
Emit(MyEvent1{})
|
|
Emit(MyEvent1{})
|
|
|
|
// Wait and check
|
|
wg.Wait()
|
|
assert.Equal(t, int64(4), count)
|
|
}
|