mattrguerra/meridian-ops-boardmainPrivate on GitHub, published here in full

limiter.test.ts

Language TypeScript702 B27 lines

packages/shared/test/limiter.test.ts

  1. import { describe, expect, it } from 'vitest'
  2. import { TokenBucket } from '../src/limiter.js'
  3. describe('TokenBucket', () => {
  4. it('allows a burst up to capacity then paces', async () => {
  5. let now = 0
  6. const slept: number[] = []
  7. const bucket = new TokenBucket(
  8. 3,
  9. 3,
  10. () => now,
  11. async (ms) => {
  12. slept.push(ms)
  13. now += ms
  14. },
  15. )
  16. for (let i = 0; i < 3; i++) await bucket.acquire()
  17. expect(slept).toHaveLength(0)
  18. await bucket.acquire()
  19. expect(slept).toHaveLength(1)
  20. })
  21. it('rejects nonsensical configuration', () => {
  22. expect(() => new TokenBucket(0, 10)).toThrow()
  23. expect(() => new TokenBucket(10, 0)).toThrow()
  24. })
  25. })