neovim

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

autocmd_spec.lua (4047B)


      1 local n = require('test.functional.testnvim')()
      2 
      3 local clear = n.clear
      4 local exec_lua = n.exec_lua
      5 
      6 local N = 7500
      7 
      8 describe('autocmd perf', function()
      9  before_each(function()
     10    clear()
     11 
     12    exec_lua([[
     13      out = {}
     14      function start()
     15        ts = vim.uv.hrtime()
     16      end
     17      function stop(name)
     18        out[#out+1] = ('%14.6f ms - %s'):format((vim.uv.hrtime() - ts) / 1000000, name)
     19      end
     20    ]])
     21  end)
     22 
     23  after_each(function()
     24    for _, line in ipairs(exec_lua([[return out]])) do
     25      print(line)
     26    end
     27  end)
     28 
     29  it('nvim_create_autocmd, nvim_del_autocmd (same pattern)', function()
     30    exec_lua(
     31      [[
     32      local N = ...
     33      local ids = {}
     34 
     35      start()
     36        for i = 1, N do
     37          ids[i] = vim.api.nvim_create_autocmd('User', {
     38            pattern = 'Benchmark',
     39            command = 'eval 0', -- noop
     40          })
     41        end
     42      stop('nvim_create_autocmd')
     43 
     44      start()
     45        for i = 1, N do
     46          vim.api.nvim_del_autocmd(ids[i])
     47        end
     48      stop('nvim_del_autocmd')
     49    ]],
     50      N
     51    )
     52  end)
     53 
     54  it('nvim_create_autocmd, nvim_del_autocmd (unique patterns)', function()
     55    exec_lua(
     56      [[
     57      local N = ...
     58      local ids = {}
     59 
     60      start()
     61        for i = 1, N do
     62          ids[i] = vim.api.nvim_create_autocmd('User', {
     63            pattern = 'Benchmark' .. i,
     64            command = 'eval 0', -- noop
     65          })
     66        end
     67      stop('nvim_create_autocmd')
     68 
     69      start()
     70        for i = 1, N do
     71          vim.api.nvim_del_autocmd(ids[i])
     72        end
     73      stop('nvim_del_autocmd')
     74    ]],
     75      N
     76    )
     77  end)
     78 
     79  it('nvim_create_autocmd + nvim_del_autocmd', function()
     80    exec_lua(
     81      [[
     82      local N = ...
     83 
     84      start()
     85        for _ = 1, N do
     86          local id = vim.api.nvim_create_autocmd('User', {
     87            pattern = 'Benchmark',
     88            command = 'eval 0', -- noop
     89          })
     90          vim.api.nvim_del_autocmd(id)
     91        end
     92      stop('nvim_create_autocmd + nvim_del_autocmd')
     93    ]],
     94      N
     95    )
     96  end)
     97 
     98  it('nvim_exec_autocmds (same pattern)', function()
     99    exec_lua(
    100      [[
    101      local N = ...
    102 
    103      for i = 1, N do
    104        vim.api.nvim_create_autocmd('User', {
    105          pattern = 'Benchmark',
    106          command = 'eval 0', -- noop
    107        })
    108      end
    109 
    110      start()
    111        vim.api.nvim_exec_autocmds('User', { pattern = 'Benchmark', modeline = false })
    112      stop('nvim_exec_autocmds')
    113    ]],
    114      N
    115    )
    116  end)
    117 
    118  it('nvim_del_augroup_by_id', function()
    119    exec_lua(
    120      [[
    121      local N = ...
    122      local group = vim.api.nvim_create_augroup('Benchmark', {})
    123 
    124      for i = 1, N do
    125        vim.api.nvim_create_autocmd('User', {
    126          pattern = 'Benchmark',
    127          command = 'eval 0', -- noop
    128          group = group,
    129        })
    130      end
    131 
    132      start()
    133        vim.api.nvim_del_augroup_by_id(group)
    134      stop('nvim_del_augroup_by_id')
    135    ]],
    136      N
    137    )
    138  end)
    139 
    140  it('nvim_del_augroup_by_name', function()
    141    exec_lua(
    142      [[
    143      local N = ...
    144      local group = vim.api.nvim_create_augroup('Benchmark', {})
    145 
    146      for i = 1, N do
    147        vim.api.nvim_create_autocmd('User', {
    148          pattern = 'Benchmark',
    149          command = 'eval 0', -- noop
    150          group = group,
    151        })
    152      end
    153 
    154      start()
    155        vim.api.nvim_del_augroup_by_name('Benchmark')
    156      stop('nvim_del_augroup_by_id')
    157    ]],
    158      N
    159    )
    160  end)
    161 
    162  it(':autocmd, :autocmd! (same pattern)', function()
    163    exec_lua(
    164      [[
    165      local N = ...
    166 
    167      start()
    168        for i = 1, N do
    169          vim.cmd('autocmd User Benchmark eval 0')
    170        end
    171      stop(':autocmd')
    172 
    173      start()
    174        vim.cmd('autocmd! User Benchmark')
    175      stop(':autocmd!')
    176    ]],
    177      N
    178    )
    179  end)
    180 
    181  it(':autocmd, :autocmd! (unique patterns)', function()
    182    exec_lua(
    183      [[
    184      local N = ...
    185 
    186      start()
    187        for i = 1, N do
    188          vim.cmd(('autocmd User Benchmark%d eval 0'):format(i))
    189        end
    190      stop(':autocmd')
    191 
    192      start()
    193        vim.cmd('autocmd! User')
    194      stop(':autocmd!')
    195    ]],
    196      N
    197    )
    198  end)
    199 end)