diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2023-11-30 20:35:25 +0000 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2023-11-30 20:35:25 +0000 |
commit | 1b7b916b7631ddf73c38e3a0070d64e4636cb2f3 (patch) | |
tree | cd08258054db80bb9a11b1061bb091c70b76926a /test/benchmark/autocmd_spec.lua | |
parent | eaa89c11d0f8aefbb512de769c6c82f61a8baca3 (diff) | |
parent | 4a8bf24ac690004aedf5540fa440e788459e5e34 (diff) | |
download | rneovim-1b7b916b7631ddf73c38e3a0070d64e4636cb2f3.tar.gz rneovim-1b7b916b7631ddf73c38e3a0070d64e4636cb2f3.tar.bz2 rneovim-1b7b916b7631ddf73c38e3a0070d64e4636cb2f3.zip |
Merge remote-tracking branch 'upstream/master' into aucmd_textputpostaucmd_textputpost
Diffstat (limited to 'test/benchmark/autocmd_spec.lua')
-rw-r--r-- | test/benchmark/autocmd_spec.lua | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/test/benchmark/autocmd_spec.lua b/test/benchmark/autocmd_spec.lua new file mode 100644 index 0000000000..cd1af23640 --- /dev/null +++ b/test/benchmark/autocmd_spec.lua @@ -0,0 +1,175 @@ +local helpers = require('test.functional.helpers')(after_each) + +local clear = helpers.clear +local exec_lua = helpers.exec_lua + +local N = 7500 + +describe('autocmd perf', function() + before_each(function() + clear() + + exec_lua([[ + out = {} + function start() + ts = vim.uv.hrtime() + end + function stop(name) + out[#out+1] = ('%14.6f ms - %s'):format((vim.uv.hrtime() - ts) / 1000000, name) + end + ]]) + end) + + after_each(function() + for _, line in ipairs(exec_lua([[return out]])) do + print(line) + end + end) + + it('nvim_create_autocmd, nvim_del_autocmd (same pattern)', function() + exec_lua([[ + local N = ... + local ids = {} + + start() + for i = 1, N do + ids[i] = vim.api.nvim_create_autocmd('User', { + pattern = 'Benchmark', + command = 'eval 0', -- noop + }) + end + stop('nvim_create_autocmd') + + start() + for i = 1, N do + vim.api.nvim_del_autocmd(ids[i]) + end + stop('nvim_del_autocmd') + ]], N) + end) + + it('nvim_create_autocmd, nvim_del_autocmd (unique patterns)', function() + exec_lua([[ + local N = ... + local ids = {} + + start() + for i = 1, N do + ids[i] = vim.api.nvim_create_autocmd('User', { + pattern = 'Benchmark' .. i, + command = 'eval 0', -- noop + }) + end + stop('nvim_create_autocmd') + + start() + for i = 1, N do + vim.api.nvim_del_autocmd(ids[i]) + end + stop('nvim_del_autocmd') + ]], N) + end) + + it('nvim_create_autocmd + nvim_del_autocmd', function() + exec_lua([[ + local N = ... + + start() + for _ = 1, N do + local id = vim.api.nvim_create_autocmd('User', { + pattern = 'Benchmark', + command = 'eval 0', -- noop + }) + vim.api.nvim_del_autocmd(id) + end + stop('nvim_create_autocmd + nvim_del_autocmd') + ]], N) + end) + + it('nvim_exec_autocmds (same pattern)', function() + exec_lua([[ + local N = ... + + for i = 1, N do + vim.api.nvim_create_autocmd('User', { + pattern = 'Benchmark', + command = 'eval 0', -- noop + }) + end + + start() + vim.api.nvim_exec_autocmds('User', { pattern = 'Benchmark', modeline = false }) + stop('nvim_exec_autocmds') + ]], N) + end) + + it('nvim_del_augroup_by_id', function() + exec_lua([[ + local N = ... + local group = vim.api.nvim_create_augroup('Benchmark', {}) + + for i = 1, N do + vim.api.nvim_create_autocmd('User', { + pattern = 'Benchmark', + command = 'eval 0', -- noop + group = group, + }) + end + + start() + vim.api.nvim_del_augroup_by_id(group) + stop('nvim_del_augroup_by_id') + ]], N) + end) + + it('nvim_del_augroup_by_name', function() + exec_lua([[ + local N = ... + local group = vim.api.nvim_create_augroup('Benchmark', {}) + + for i = 1, N do + vim.api.nvim_create_autocmd('User', { + pattern = 'Benchmark', + command = 'eval 0', -- noop + group = group, + }) + end + + start() + vim.api.nvim_del_augroup_by_name('Benchmark') + stop('nvim_del_augroup_by_id') + ]], N) + end) + + it(':autocmd, :autocmd! (same pattern)', function() + exec_lua([[ + local N = ... + + start() + for i = 1, N do + vim.cmd('autocmd User Benchmark eval 0') + end + stop(':autocmd') + + start() + vim.cmd('autocmd! User Benchmark') + stop(':autocmd!') + ]], N) + end) + + it(':autocmd, :autocmd! (unique patterns)', function() + exec_lua([[ + local N = ... + + start() + for i = 1, N do + vim.cmd(('autocmd User Benchmark%d eval 0'):format(i)) + end + stop(':autocmd') + + start() + vim.cmd('autocmd! User') + stop(':autocmd!') + ]], N) + end) +end) |