Files
webrtc/operations_test.go
Juliusz Chroboczek 9bbffdd5aa Simplify operations
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.
2020-05-31 15:39:19 -07:00

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()
}