fz
Version:
Simple, fast, fuzzy string searching.
82 lines (62 loc) • 2.05 kB
JavaScript
const fz = require('../'),
buildFuzzyRegExpString = require('../lib/build-fuzzy-regexp-string'),
isFuzzyStringMatch = require('../lib/is-fuzzy-string-match'),
candidates = require('./words');
const queries = [
'plnte', 'cstr', 'mts', 'cdimtm', 'hndt', 'vlpt', 'molti', 'prsent', 'vnnts', 'vvs',
'alq', 'sed', 'acs', 'osur', 'isl', 'ulvina', 'ellentes', 'terdum', 'olo', 'pata'
],
clen = candidates.length,
qlen = queries.length;
const buildRegExp = query => {
return new RegExp(buildFuzzyRegExpString(query), 'i');
};
const tests = {
'`while` loop with static query': () => {
let query = queries[0];
for (let i = 0; i < clen; i++) {
isFuzzyStringMatch(candidates[i], query);
}
},
'`while` loop with dynamic query': () => {
for (let i = 0; i < clen; i++) {
isFuzzyStringMatch(candidates[i], queries[i % qlen]);
}
},
'RegExp with static query': () => {
let regex = buildRegExp(queries[0]);
for (let i = 0; i < clen; i++) {
regex.test(candidates[i]);
}
},
'RegExp with dynamic query': () => {
for (let i = 0; i < clen; i++) {
let regex = buildRegExp(queries[i % qlen]);
regex.test(candidates[i]);
}
},
'fz() with static query': () => {
let query = queries[0];
for (let i = 0; i < clen; i++) {
fz(candidates[i], query);
}
},
'fz() with dynamic query': () => {
for (let i = 0; i < clen; i++) {
fz(candidates[i], queries[i % qlen]);
}
}
};
const RUN_COUNT = 1500;
console.log(`Beginning benchmarks. Each test will be run ${RUN_COUNT} times.\n`);
Object.keys(tests).forEach(name => {
const test = tests[name];
console.log(`Benchmarking test: ${name}`);
const start = process.hrtime();
for (var i = 0; i < RUN_COUNT; i++) {
test();
}
const end = process.hrtime(start);
const durationMs = (end[0] * 1000) + (end[1] / 1000000);
console.log(`Completed in ${durationMs.toFixed(4)}ms (${(RUN_COUNT/(durationMs/1000)).toFixed(4)} ops/sec)\n`);
});