Skip to content

Instantly share code, notes, and snippets.

@anjiro
Created November 6, 2021 18:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anjiro/db5b539242d6791c46c59fb6025b9874 to your computer and use it in GitHub Desktop.
Save anjiro/db5b539242d6791c46c59fb6025b9874 to your computer and use it in GitHub Desktop.
Vim stridx vs match
function RandStr(len)
py3 << EOF
import vim, random
rstr = ''.join([chr(random.randint(65,123)) for i in range(int(vim.eval('a:len')))])
vim.command(f"return '{rstr}'")
EOF
endfunction
function TimeStridx(numiter, candidates)
let l:tottime = 0.0
for l:in in range(a:numiter)
let l:cands = copy(a:candidates)
let l:search = RandStr(10)
let l:start = reltime()
call filter(l:cands, 'stridx(v:val, l:search) == 0')
let l:tottime += reltimefloat(reltime(l:start))
endfor
return l:tottime / a:numiter
endfunction
function TimeMatch(numiter, candidates)
let l:tottime = 0.0
for l:in in range(a:numiter)
let l:cands = copy(a:candidates)
let l:search = RandStr(10)
let l:start = reltime()
call filter(l:cands, {_,x -> match(x, l:search) == 0})
let l:tottime += reltimefloat(reltime(l:start))
endfor
return l:tottime / a:numiter
endfunction
function TimeCompare(numiter)
let l:candidates = []
for i in range(100000)
call add(l:candidates, RandStr(100))
endfor
let l:time_stridx = TimeStridx(a:numiter, l:candidates)
let l:time_match = TimeMatch(a:numiter, l:candidates)
echom printf('stridx: %.4fs, match: %.4fs', l:time_stridx, l:time_match)
echom printf('Difference: %.4fs', abs(l:time_match - l:time_stridx))
endfunction
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment