From 2384c4de1c15877ca97383164760ede736f09d8c Mon Sep 17 00:00:00 2001 From: Schluffe Date: Wed, 26 Aug 2026 18:03:33 +0200 Subject: [PATCH] fix dict --- engine/lib/Dictionary.test.ts | 33 +++++++++++++++++++++++++++++++++ engine/lib/Dictionary.ts | 13 +++++++++---- 2 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 engine/lib/Dictionary.test.ts diff --git a/engine/lib/Dictionary.test.ts b/engine/lib/Dictionary.test.ts new file mode 100644 index 0000000..fff137b --- /dev/null +++ b/engine/lib/Dictionary.test.ts @@ -0,0 +1,33 @@ +import { expect, test } from "vitest"; +import { + createDictionary, + type Dictionary, + deleteEntrySave, + forEntry, + getEntry, + setEntrySave, +} from "./Dictionary.ts"; + +test("Dictionary", () => { + const dict: Dictionary = createDictionary([ + ["a", 1], + ["b", 2], + ["c", 3], + ]); + setEntrySave(dict, "foo", 42); + setEntrySave(dict, "bar", 0); + deleteEntrySave(dict, "bar"); + + console.table(dict.entries); + console.table(dict.indices); + + expect(getEntry(dict, "foo")).toBe(42); + expect(getEntry(dict, "bar")).toBe(undefined); + expect(dict.indices.size).toBe(dict.entries.length); + + let sum = 0; + forEntry(dict, (value) => { + sum += value; + }); + expect(sum).toBe(48); +}); diff --git a/engine/lib/Dictionary.ts b/engine/lib/Dictionary.ts index 0fc0e2d..bd28e9f 100644 --- a/engine/lib/Dictionary.ts +++ b/engine/lib/Dictionary.ts @@ -6,10 +6,15 @@ export type Dictionary = { setQueue: Array<[K, V]>; }; -export function createDictionary(): Dictionary { +export function createDictionary( + iterable?: Iterable<[K, V]>, +): Dictionary { + const entries = iterable ? [...iterable] : []; + const indices = new Map(entries.map(([k], i) => [k, i])); + return { - entries: [], - indices: new Map(), + entries, + indices, isIterating: false, deleteQueue: [], setQueue: [], @@ -46,8 +51,8 @@ export function setEntry( ): void { const index = dict.indices.get(key); if (index === undefined) { - dict.entries.push([key, value]); dict.indices.set(key, dict.entries.length); + dict.entries.push([key, value]); } else { dict.entries[index][1] = value; }