let s:suite = themis#suite('parser') let s:assert = themis#helper('assert') function! s:suite.escape() abort call s:assert.equals( \ neocomplete#filters#fuzzy_escape('abc'), 'a.*b.*c.*') call s:assert.equals( \ neocomplete#filters#fuzzy_escape('%a%b%c'), '%%a.*%%b.*%%c.*') call s:assert.equals( \ neocomplete#filters#fuzzy_escape('%[ab]c'), '%%%[a.*b.*%]c.*') call s:assert.equals( \ neocomplete#filters#fuzzy_escape('.abc'), '%.a.*b.*c.*') endfunction function! s:suite.sort() abort let candidates = [] for i in range(1, 1000) call add(candidates, { 'word' : i, 'rank' : i }) endfor function! CompareRank(i1, i2) abort let diff = (get(a:i2, 'rank', 0) - get(a:i1, 'rank', 0)) return (diff != 0) ? diff : (len(a:i1.word) < len(a:i2.word)) ? 1 : -1 endfunction" " Benchmark. let start = reltime() call sort(copy(candidates), 'CompareRank') echomsg reltimestr(reltime(start)) let start = reltime() call neocomplete#filters#sorter_rank#define().filter( \ {'candidates' : copy(candidates), 'input' : '' }) echomsg reltimestr(reltime(start)) call s:assert.equals(sort(copy(candidates), 'CompareRank'), \ neocomplete#filters#sorter_rank#define().filter( \ {'candidates' : copy(candidates), 'input' : '' })) endfunction function! s:suite.fuzzy() abort call s:assert.equals(neocomplete#filters#matcher_fuzzy#define().filter( \ {'complete_str' : 'ae', 'candidates' : ['~/~']}), []) endfunction function! s:suite.overlap() abort call s:assert.equals(neocomplete#filters#converter_remove_overlap# \length('foo bar', 'bar baz'), 3) call s:assert.equals(neocomplete#filters#converter_remove_overlap# \length('foobar', 'barbaz'), 3) call s:assert.equals(neocomplete#filters#converter_remove_overlap# \length('foob', 'baz'), 1) call s:assert.equals(neocomplete#filters#converter_remove_overlap# \length('foobar', 'foobar'), 6) call s:assert.equals(neocomplete#filters#converter_remove_overlap# \length('тест', 'ст'), len('ст')) endfunction " vim:foldmethod=marker:fen: