function assertMatches(pattern: string, word: string, decoratedWord: string | undefined, filter: FuzzyScorer, opts: { patternPos?: number, wordPos?: number, firstMatchCanBeWeak?: boolean } = {}) { let r = filter(pattern, pattern.toLowerCase(), opts.patternPos || 0, word, word.toLowerCase(), opts.wordPos || 0, opts.firstMatchCanBeWeak || false); assert.ok(!decoratedWord === (!r || r[1].length === 0)); if (r) { const [, matches] = r; let pos = 0; for (let i = 0; i < matches.length; i++) { let actual = matches[i]; let expected = decoratedWord!.indexOf('^', pos) - i; assert.equal(actual, expected); pos = expected + 1 + i; } } }
function assertMatches(pattern: string, word: string, decoratedWord: string | undefined, filter: FuzzyScorer, opts: { patternPos?: number, wordPos?: number, firstMatchCanBeWeak?: boolean } = {}) { let r = filter(pattern, pattern.toLowerCase(), opts.patternPos || 0, word, word.toLowerCase(), opts.wordPos || 0, opts.firstMatchCanBeWeak || false); assert.ok(!decoratedWord === !r); if (r) { let [, matches] = r; let actualWord = ''; for (let pos = 0; pos < word.length; pos++) { if (2 ** pos & matches) { actualWord += '^'; } actualWord += word[pos]; } assert.equal(actualWord, decoratedWord); } }
function assertMatches(pattern: string, word: string, decoratedWord: string | undefined, filter: FuzzyScorer, opts: { patternPos?: number, wordPos?: number, firstMatchCanBeWeak?: boolean } = {}) { let r = filter(pattern, pattern.toLowerCase(), opts.patternPos || 0, word, word.toLowerCase(), opts.wordPos || 0, opts.firstMatchCanBeWeak || false); assert.ok(!decoratedWord === !r); if (r) { let matches = createMatches(r); let actualWord = ''; let pos = 0; for (const match of matches) { actualWord += word.substring(pos, match.start); actualWord += '^' + word.substring(match.start, match.end).split('').join('^'); pos = match.end; } actualWord += word.substring(pos); assert.equal(actualWord, decoratedWord); } }