neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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)