keycodes_spec.lua (2371B)
1 local n = require('test.functional.testnvim')() 2 local clear = n.clear 3 local api = n.api 4 local fn = n.fn 5 6 local keycodes = require('src.nvim.keycodes') 7 8 describe('nvim_replace_termcodes performance', function() 9 it('200 calls with a key repeated 5000 times', function() 10 clear() 11 local stats = {} 12 local sum = 0 13 local ms = 1 / 1000000 14 15 for _, keycode in ipairs(keycodes.names) do 16 local notation = ('<%s>'):format(keycode[2]) 17 local str = notation:rep(5000) 18 19 local start = vim.uv.hrtime() 20 for _ = 1, 200 do 21 api.nvim_replace_termcodes(str, false, true, true) 22 end 23 local elapsed = vim.uv.hrtime() - start 24 25 table.insert(stats, elapsed) 26 sum = sum + elapsed 27 io.stdout:write(('\n%-20s%14.6f ms'):format(notation, elapsed * ms)) 28 io.stdout:flush() 29 end 30 io.stdout:write('\n') 31 32 table.sort(stats) 33 print(('%18s'):rep(6):format('avg', 'min', '25%', 'median', '75%', 'max')) 34 print( 35 (' %14.6f ms'):rep(6):format( 36 sum / #stats * ms, 37 stats[1] * ms, 38 stats[1 + math.floor(#stats * 0.25)] * ms, 39 stats[1 + math.floor(#stats * 0.5)] * ms, 40 stats[1 + math.floor(#stats * 0.75)] * ms, 41 stats[#stats] * ms 42 ) 43 ) 44 end) 45 end) 46 47 describe('keytrans() performance', function() 48 it('200 calls with a key repeated 5000 times', function() 49 clear() 50 local stats = {} 51 local sum = 0 52 local ms = 1 / 1000000 53 54 for _, keycode in ipairs(keycodes.names) do 55 local notation = ('<%s>'):format(keycode[2]) 56 local str = api.nvim_replace_termcodes(notation, false, true, true):rep(5000) 57 58 local start = vim.uv.hrtime() 59 for _ = 1, 200 do 60 fn.keytrans(str) 61 end 62 local elapsed = vim.uv.hrtime() - start 63 64 table.insert(stats, elapsed) 65 sum = sum + elapsed 66 io.stdout:write(('\n%-20s%14.6f ms'):format(notation, elapsed * ms)) 67 io.stdout:flush() 68 end 69 io.stdout:write('\n') 70 71 table.sort(stats) 72 print((' %17s'):rep(6):format('avg', 'min', '25%', 'median', '75%', 'max')) 73 print( 74 (' %14.6f ms'):rep(6):format( 75 sum / #stats * ms, 76 stats[1] * ms, 77 stats[1 + math.floor(#stats * 0.25)] * ms, 78 stats[1 + math.floor(#stats * 0.5)] * ms, 79 stats[1 + math.floor(#stats * 0.75)] * ms, 80 stats[#stats] * ms 81 ) 82 ) 83 end) 84 end)