import * as assert from "node:assert"; import { module2Env } from "../lib/environment/env.js"; import { ModuleStd } from "../lib/stdlib.js"; import { pretty } from "../lib/util/pretty.js"; import { emptyTrie, growPrefix, insert, isProperlySorted, suggest } from "../lib/util/trie.js"; /////////////////// // Setup TRIE 1 ... const with1Item = insert(emptyTrie)('abba')('dancing queen'); console.log(pretty(with1Item)); const with2Items = insert(with1Item)('aboriginal')('australia'); console.log(pretty(with2Items)); const with3Items = insert(with2Items)('food')('pizza'); console.log(pretty(with3Items)); const with4Items = insert(with3Items)('absent')('not here'); console.log(pretty(with4Items)); const with5Items = insert(with4Items)('000')('000'); console.log(pretty(with5Items)); const with6Items = insert(with5Items)('aboriginally')('??'); console.log(pretty(with6Items)); const with7Items = insert(with6Items)('ab')('yup'); console.log(pretty(with7Items)); const with8Items = insert(with7Items)('')('hi!'); console.log(pretty(with8Items)); /////////////////// // Setup TRIE 2 ... const bigTrie = module2Env(ModuleStd).name2dyn; /////////////////// // Test... // grow key (for auto-complete) assert.equal(growPrefix(with6Items)("a" ), "b" ); assert.equal(growPrefix(with6Items)("ab" ), "" ); assert.equal(growPrefix(with6Items)("abb"), "a" ); assert.equal(growPrefix(with6Items)("f" ), "ood" ); assert.equal(growPrefix(with6Items)("abo"), "riginal"); // suggest (also for auto-complete) assert.deepEqual( suggest(with8Items)("a")(3), [ [ 'ab', 'yup' ], [ 'abba', 'dancing queen' ], [ 'aboriginal', 'australia' ] ]); assert.deepEqual( suggest(with8Items)("a")(4), [ [ 'ab', 'yup' ], [ 'abba', 'dancing queen' ], [ 'aboriginal', 'australia' ], [ 'aboriginally', '??' ] ]); assert.deepEqual( suggest(with8Items)("a")(5), [ [ 'ab', 'yup' ], [ 'abba', 'dancing queen' ], [ 'aboriginal', 'australia' ], [ 'aboriginally', '??' ], [ 'absent', 'not here' ] ]); assert.deepEqual( suggest(with8Items)("a")(15), [ [ 'ab', 'yup' ], [ 'abba', 'dancing queen' ], [ 'aboriginal', 'australia' ], [ 'aboriginally', '??' ], [ 'absent', 'not here' ] ]); assert.equal( isProperlySorted(with8Items), true, "trie should always be properly sorted!" ); assert.equal( isProperlySorted(bigTrie), true, "trie should always be properly sorted!" ); assert.equal( growPrefix(bigTrie)("dict.le"), "ngth" ); assert.deepEqual( suggest(bigTrie)("ooo")(2), [] ); assert.deepEqual( suggest(bigTrie)("df")(2), [] );