package rate
import (
"context"
"testing"
"time"
)
func TestLimiter_zeroUnlimited(t *testing.T) {
l := New(0)
ctx := context.Background()
for i := 0; i < 100; i++ {
if err := l.Wait(ctx); err != nil {
t.Fatalf("wait: %v", err)
}
}
}
func TestLimiter_rateShape(t *testing.T) {
l := New(20)
ctx := context.Background()
start := time.Now()
for i := 0; i < 10; i++ {
if err := l.Wait(ctx); err != nil {
t.Fatalf("wait: %v", err)
}
}
if elapsed := time.Since(start); elapsed > 500*time.Millisecond {
t.Errorf("10 tokens took %v, rate too slow", elapsed)
}
}
func TestLimiter_cancel(t *testing.T) {
l := New(1)
ctx, cancel := context.WithCancel(context.Background())
_ = l.Wait(ctx)
cancel()
if err := l.Wait(ctx); err == nil {
t.Errorf("wait after cancel returned nil")
}
}