79 lines
1.3 KiB
Go
79 lines
1.3 KiB
Go
package lsp
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
)
|
|
|
|
func TestDynamicQueueFIFO(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
ctx := t.Context()
|
|
q := newDynamicQueue[int]()
|
|
|
|
for i := range 1000 {
|
|
if err := q.Put(ctx, i); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
for i := range 1000 {
|
|
got, err := q.Get(ctx)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got != i {
|
|
t.Fatalf("Get() = %d, want %d", got, i)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDynamicQueueGetCancellation(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
ctx, cancel := context.WithCancel(t.Context())
|
|
cancel()
|
|
|
|
q := newDynamicQueue[int]()
|
|
got, err := q.Get(ctx)
|
|
if !errors.Is(err, context.Canceled) {
|
|
t.Fatalf("Get() error = %v, want %v", err, context.Canceled)
|
|
}
|
|
if got != 0 {
|
|
t.Fatalf("Get() = %d, want zero value", got)
|
|
}
|
|
}
|
|
|
|
func TestDynamicQueuePutCancellationWhileStateUnavailable(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
q := newDynamicQueue[int]()
|
|
state, err := q.getAny(t.Context())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
ctx, cancel := context.WithCancel(t.Context())
|
|
cancel()
|
|
|
|
putErr := q.Put(ctx, 1)
|
|
if !errors.Is(putErr, context.Canceled) {
|
|
t.Fatalf("Put() error = %v, want %v", putErr, context.Canceled)
|
|
}
|
|
|
|
q.idle <- state
|
|
|
|
err = q.Put(t.Context(), 2)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
got, err := q.Get(t.Context())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got != 2 {
|
|
t.Fatalf("Get() = %d, want 2", got)
|
|
}
|
|
}
|