Files
rubic-cube/node_modules/@gkucmierz/utils/spec/Trie.spec.mjs

70 lines
1.9 KiB
JavaScript

import {
Trie,
} from '../src/Trie.mjs';
describe('Trie', () => {
it('check empty', () => {
const trie = Trie();
expect(trie.has('')).toBe(false);
expect(trie.has('abc')).toBe(false);
});
it('init data', () => {
const trie = Trie(['abc', '']);
expect(trie.has('')).toBe(true);
expect(trie.has('abc')).toBe(true);
});
it('add/readd data', () => {
const trie = Trie();
expect(trie.has('')).toBe(false);
expect(trie.add('')).toBe(true);
expect(trie.has('')).toBe(true);
expect(trie.add('')).toBe(false);
});
it('list data', () => {
const trie = Trie(['abc', '', 'abcdef', 'xyz']);
const abc = ['abc', 'abcdef'];
expect(trie.get('a')).toEqual(abc);
expect(trie.get('ab')).toEqual(abc);
expect(trie.get('abc')).toEqual(abc);
expect(trie.get('aa')).toEqual([]);
expect(trie.get('')).toEqual(['', 'abc', 'abcdef', 'xyz']);
});
it('remove node', () => {
const trie = Trie(['a', 'ab', 'abc']);
expect(trie.has('abc')).toEqual(true);
expect(trie.remove('abc')).toEqual(true);
expect(trie.remove('abc')).toEqual(false);
expect(trie.has('abc')).toEqual(false);
expect(trie.has('ab')).toEqual(true);
expect(trie.remove('ab')).toEqual(true);
expect(trie.remove('ab')).toEqual(false);
expect(trie.has('ab')).toEqual(false);
expect(trie.has('a')).toEqual(true);
expect(trie.remove('a')).toEqual(true);
expect(trie.remove('a')).toEqual(false);
expect(trie.has('a')).toEqual(false);
});
it('keep child node after parent removal', () => {
const trie = Trie(['a', 'abc']);
expect(trie.has('a')).toEqual(true);
expect(trie.remove('a')).toEqual(true);
expect(trie.remove('a')).toEqual(false);
expect(trie.has('a')).toEqual(false);
expect(trie.has('abc')).toEqual(true);
expect(trie.remove('abc')).toEqual(true);
expect(trie.remove('abc')).toEqual(false);
expect(trie.has('abc')).toEqual(false);
})
});