mirror of
https://github.com/pion/webrtc.git
synced 2025-10-03 14:26:25 +08:00

Operations is now essentially a slice protected by a single lock. No lock is held during execution, serialisation is guaranteed by ensuring that there is at most one goroutine running at a time. A coincidental benefit is that we now won't deadlock if an operation panics. While this should be slightly faster, the main point of this change is to reduce the amount of noise in the blocking profile.
32 lines
584 B
Go
32 lines
584 B
Go
package webrtc
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestOperations_Enqueue(t *testing.T) {
|
|
ops := newOperations()
|
|
for i := 0; i < 100; i++ {
|
|
results := make([]int, 16)
|
|
for i := range results {
|
|
func(j int) {
|
|
ops.Enqueue(func() {
|
|
results[j] = j * j
|
|
})
|
|
}(i)
|
|
}
|
|
|
|
ops.Done()
|
|
expected := []int{0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225}
|
|
assert.Equal(t, len(expected), len(results))
|
|
assert.Equal(t, expected, results)
|
|
}
|
|
}
|
|
|
|
func TestOperations_Done(t *testing.T) {
|
|
ops := newOperations()
|
|
ops.Done()
|
|
}
|