deno.land / x / msgpack_javascript@v3.0.0-beta2 / test / CachedKeyDecoder.test.ts
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677import assert from "assert";import { CachedKeyDecoder, KeyDecoder } from "../src/CachedKeyDecoder";import { utf8EncodeJs, utf8Count } from "../src/utils/utf8";
function tryDecode(keyDecoder: KeyDecoder, str: string): string { const byteLength = utf8Count(str); const bytes = new Uint8Array(byteLength); utf8EncodeJs(str, bytes, 0); if (!keyDecoder.canBeCached(byteLength)) { throw new Error("Unexpected precondition"); } return keyDecoder.decode(bytes, 0, byteLength);}
describe("CachedKeyDecoder", () => { context("basic behavior", () => { it("decodes a string", () => { const decoder = new CachedKeyDecoder();
assert.deepStrictEqual(tryDecode(decoder, "foo"), "foo"); assert.deepStrictEqual(tryDecode(decoder, "foo"), "foo"); assert.deepStrictEqual(tryDecode(decoder, "foo"), "foo");
// console.dir(decoder, { depth: 100 }); });
it("decodes strings", () => { const decoder = new CachedKeyDecoder();
assert.deepStrictEqual(tryDecode(decoder, "foo"), "foo"); assert.deepStrictEqual(tryDecode(decoder, "bar"), "bar"); assert.deepStrictEqual(tryDecode(decoder, "foo"), "foo");
// console.dir(decoder, { depth: 100 }); });
it("decodes strings with purging records", () => { const decoder = new CachedKeyDecoder(16, 4);
for (let i = 0; i < 100; i++) { assert.deepStrictEqual(tryDecode(decoder, "foo1"), "foo1"); assert.deepStrictEqual(tryDecode(decoder, "foo2"), "foo2"); assert.deepStrictEqual(tryDecode(decoder, "foo3"), "foo3"); assert.deepStrictEqual(tryDecode(decoder, "foo4"), "foo4"); assert.deepStrictEqual(tryDecode(decoder, "foo5"), "foo5"); }
// console.dir(decoder, { depth: 100 }); }); });
context("edge cases", () => { // len=0 is not supported because it is just an empty string it("decodes str with len=1", () => { const decoder = new CachedKeyDecoder();
assert.deepStrictEqual(tryDecode(decoder, "f"), "f"); assert.deepStrictEqual(tryDecode(decoder, "a"), "a"); assert.deepStrictEqual(tryDecode(decoder, "f"), "f"); assert.deepStrictEqual(tryDecode(decoder, "a"), "a");
// console.dir(decoder, { depth: 100 }); });
it("decodes str with len=maxKeyLength", () => { const decoder = new CachedKeyDecoder(1);
assert.deepStrictEqual(tryDecode(decoder, "f"), "f"); assert.deepStrictEqual(tryDecode(decoder, "a"), "a"); assert.deepStrictEqual(tryDecode(decoder, "f"), "f"); assert.deepStrictEqual(tryDecode(decoder, "a"), "a");
//console.dir(decoder, { depth: 100 }); }); });});
Version Info