snapshot of https://github.com/tldraw/tldraw.git (main, 2026-09-23; blobs > 131072B omitted)
Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled
Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled
This commit is contained in:
101
packages/utils/src/lib/LruCache.test.ts
Normal file
101
packages/utils/src/lib/LruCache.test.ts
Normal file
@@ -0,0 +1,101 @@
|
||||
import { LruCache } from './LruCache'
|
||||
|
||||
describe('LruCache', () => {
|
||||
it('stores and retrieves values', () => {
|
||||
const cache = new LruCache<string, number>(3)
|
||||
cache.set('a', 1)
|
||||
cache.set('b', 2)
|
||||
expect(cache.get('a')).toBe(1)
|
||||
expect(cache.get('b')).toBe(2)
|
||||
expect(cache.get('c')).toBeUndefined()
|
||||
})
|
||||
|
||||
it('reports size', () => {
|
||||
const cache = new LruCache<string, number>(5)
|
||||
expect(cache.size).toBe(0)
|
||||
cache.set('a', 1)
|
||||
expect(cache.size).toBe(1)
|
||||
cache.set('b', 2)
|
||||
expect(cache.size).toBe(2)
|
||||
})
|
||||
|
||||
it('delete() removes an entry and frees its slot', () => {
|
||||
const cache = new LruCache<string, number>(2)
|
||||
cache.set('a', 1)
|
||||
cache.set('b', 2)
|
||||
expect(cache.delete('a')).toBe(true)
|
||||
expect(cache.delete('a')).toBe(false)
|
||||
expect(cache.has('a')).toBe(false)
|
||||
cache.set('c', 3)
|
||||
expect(cache.get('b')).toBe(2)
|
||||
expect(cache.size).toBe(2)
|
||||
})
|
||||
|
||||
it('has() checks existence without promoting', () => {
|
||||
const cache = new LruCache<string, number>(2)
|
||||
cache.set('a', 1)
|
||||
cache.set('b', 2)
|
||||
expect(cache.has('a')).toBe(true)
|
||||
expect(cache.has('z')).toBe(false)
|
||||
|
||||
// 'a' was not promoted by has(), so adding 'c' should evict 'a'
|
||||
cache.set('c', 3)
|
||||
expect(cache.has('a')).toBe(false)
|
||||
})
|
||||
|
||||
it('evicts the oldest entry when exceeding capacity', () => {
|
||||
const cache = new LruCache<string, number>(2)
|
||||
cache.set('a', 1)
|
||||
cache.set('b', 2)
|
||||
cache.set('c', 3) // should evict 'a'
|
||||
|
||||
expect(cache.get('a')).toBeUndefined()
|
||||
expect(cache.get('b')).toBe(2)
|
||||
expect(cache.get('c')).toBe(3)
|
||||
expect(cache.size).toBe(2)
|
||||
})
|
||||
|
||||
it('get() promotes entry so it is not evicted next', () => {
|
||||
const cache = new LruCache<string, number>(2)
|
||||
cache.set('a', 1)
|
||||
cache.set('b', 2)
|
||||
|
||||
// Access 'a' to promote it; now 'b' is oldest
|
||||
cache.get('a')
|
||||
cache.set('c', 3) // should evict 'b', not 'a'
|
||||
|
||||
expect(cache.get('b')).toBeUndefined()
|
||||
expect(cache.get('a')).toBe(1)
|
||||
expect(cache.get('c')).toBe(3)
|
||||
})
|
||||
|
||||
it('set() on existing key updates value and promotes it', () => {
|
||||
const cache = new LruCache<string, number>(2)
|
||||
cache.set('a', 1)
|
||||
cache.set('b', 2)
|
||||
|
||||
// Update 'a' — promotes it, 'b' becomes oldest
|
||||
cache.set('a', 10)
|
||||
expect(cache.get('a')).toBe(10)
|
||||
|
||||
cache.set('c', 3) // should evict 'b'
|
||||
expect(cache.get('b')).toBeUndefined()
|
||||
expect(cache.get('a')).toBe(10)
|
||||
expect(cache.size).toBe(2)
|
||||
})
|
||||
|
||||
it('evicts entries in insertion order across many inserts', () => {
|
||||
const cache = new LruCache<number, number>(3)
|
||||
for (let i = 0; i < 10; i++) {
|
||||
cache.set(i, i * 10)
|
||||
}
|
||||
// Only the last 3 should remain
|
||||
expect(cache.size).toBe(3)
|
||||
expect(cache.get(7)).toBe(70)
|
||||
expect(cache.get(8)).toBe(80)
|
||||
expect(cache.get(9)).toBe(90)
|
||||
for (let i = 0; i < 7; i++) {
|
||||
expect(cache.has(i)).toBe(false)
|
||||
}
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user