44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import { describe, it } from "mocha";
|
|
import { expect } from "chai";
|
|
|
|
import { WeakValueMap } from "../packages/opvault.js/weakMap";
|
|
|
|
declare const gc: () => void;
|
|
|
|
describe("WeakValueMap", () => {
|
|
interface Value {
|
|
value: number;
|
|
}
|
|
|
|
it("covers base use cases", () => {
|
|
const map = new WeakValueMap<string, Value>();
|
|
const object = { value: 1 };
|
|
map.set("key", object);
|
|
expect(map.get("key")!.value).to.equal(1);
|
|
expect(map.delete("key")).to.be.true;
|
|
expect(!map.delete("key")).to.be.true;
|
|
});
|
|
|
|
it("overrides previous value", () => {
|
|
const map = new WeakValueMap<string, Value>();
|
|
map.set("key", { value: 2 });
|
|
map.set("key", { value: 3 });
|
|
expect(map.get("key")!.value).to.equal(3);
|
|
});
|
|
|
|
it("deletes garbage collected values", (done) => {
|
|
const map = new WeakValueMap<string, Value>();
|
|
map.set("key", { value: 1 });
|
|
setTimeout(() => {
|
|
gc();
|
|
expect(map.has("key")).to.be.false;
|
|
map.set("key", { value: 2 });
|
|
|
|
setTimeout(() => {
|
|
gc();
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|