Files
kjol/tools/tsgo/internal/lsp/dynamic_queue_test.go
2026-07-09 16:50:43 -04:00

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