blob: 33b0c45da4cae0c50549d007bf239726c032fd40 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
const { assert } = chai;
import * as Common from '../../../../front_end/common/common.js';
describe('Trie', () => {
let trie: Common.Trie.Trie;
beforeEach(() => {
trie = new Common.Trie.Trie();
});
it('stores and retrieves words', () => {
trie.add('foo');
assert.isTrue(trie.has('foo'));
assert.isFalse(trie.has('bar'));
});
it('removes words', () => {
trie.add('foo');
assert.isTrue(trie.has('foo'));
trie.remove('foo');
assert.isFalse(trie.has('foo'));
});
it('completes words based on prefixes', () => {
trie.add('foo');
trie.add('food');
trie.add('flora');
trie.add('boat');
trie.add('focus');
trie.add('banana');
assert.deepEqual(trie.words('fo'), ['foo', 'food', 'focus']);
assert.isEmpty(trie.words('cat'));
});
it('clears words', () => {
trie.add('foo');
assert.isTrue(trie.has('foo'));
trie.clear();
assert.isFalse(trie.has('foo'));
assert.isEmpty(trie.words('foo'));
});
it('provides the longest prefix', () => {
trie.add('super');
trie.add('supercar');
// Longest non-word prefix match.
assert.equal(trie.longestPrefix('supercalifragilisticexpialidocious', false), 'superca');
// Longest word prefix match.
assert.equal(trie.longestPrefix('supercalifragilisticexpialidocious', true), 'super');
});
});