import { describe, it, expect } from 'vitest'; import { editDistance, closeEnough } from '../src/lib/fuzzy.js'; describe('editDistance', () => { it('counts insert / delete / substitute', () => { expect(editDistance('', '')).toBe(0); expect(editDistance('abc', 'abc')).toBe(0); expect(editDistance('abc', 'ab')).toBe(1); expect(editDistance('abc', 'abx')).toBe(1); expect(editDistance('kitten', 'sitting')).toBe(3); expect(editDistance('charizard', 'charizrd')).toBe(1); }); }); describe('closeEnough', () => { it('accepts a small typo on a long name', () => { expect(closeEnough('charizrd', 'charizard')).toBe(true); expect(closeEnough('tyraniter', 'tyranitar')).toBe(true); expect(closeEnough('gardevor', 'gardevoir')).toBe(true); }); it('is strict on short names', () => { expect(closeEnough('meh', 'mew')).toBe(false); expect(closeEnough('mow', 'muk')).toBe(false); expect(closeEnough('mew', 'mew')).toBe(true); }); it("won't bridge two genuinely different names", () => { expect(closeEnough('pikachu', 'raichu')).toBe(false); expect(closeEnough('bulbasaur', 'ivysaur')).toBe(false); }); });