aboutsummaryrefslogtreecommitdiff
path: root/test/benchmark/autocmd_spec.lua
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2023-11-30 20:35:25 +0000
committerJosh Rahm <joshuarahm@gmail.com>2023-11-30 20:35:25 +0000
commit1b7b916b7631ddf73c38e3a0070d64e4636cb2f3 (patch)
treecd08258054db80bb9a11b1061bb091c70b76926a /test/benchmark/autocmd_spec.lua
parenteaa89c11d0f8aefbb512de769c6c82f61a8baca3 (diff)
parent4a8bf24ac690004aedf5540fa440e788459e5e34 (diff)
downloadrneovim-aucmd_textputpost.tar.gz
rneovim-aucmd_textputpost.tar.bz2
rneovim-aucmd_textputpost.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.lua175
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)