diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2024-03-09 14:57:57 -0700 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2024-03-09 14:57:57 -0700 |
commit | c324271b99eee4c621463f368914d57cd729bd9c (patch) | |
tree | 5d979d333a2d5f9c080991d5482fd5916f8579c6 /test/benchmark/deepcopy_spec.lua | |
parent | 931bffbda3668ddc609fc1da8f9eb576b170aa52 (diff) | |
parent | ade1b12f49c3b3914c74847d791eb90ea90b56b7 (diff) | |
download | rneovim-c324271b99eee4c621463f368914d57cd729bd9c.tar.gz rneovim-c324271b99eee4c621463f368914d57cd729bd9c.tar.bz2 rneovim-c324271b99eee4c621463f368914d57cd729bd9c.zip |
Merge remote-tracking branch 'upstream/master' into userreg
Diffstat (limited to 'test/benchmark/deepcopy_spec.lua')
-rw-r--r-- | test/benchmark/deepcopy_spec.lua | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/test/benchmark/deepcopy_spec.lua b/test/benchmark/deepcopy_spec.lua new file mode 100644 index 0000000000..dc8655f19c --- /dev/null +++ b/test/benchmark/deepcopy_spec.lua @@ -0,0 +1,58 @@ +local N = 20 + +local function tcall(f, ...) + local ts = vim.uv.hrtime() + for _ = 1, N do + f(...) + end + return ((vim.uv.hrtime() - ts) / 1000000) / N +end + +local function build_shared(n) + local t = {} + local a = {} + local b = {} + local c = {} + for _ = 1, n do + t[#t + 1] = {} + local tl = t[#t] + for _ = 1, n do + tl[#tl + 1] = a + tl[#tl + 1] = b + tl[#tl + 1] = c + end + end + return t +end + +local function build_unique(n) + local t = {} + for _ = 1, n do + t[#t + 1] = {} + local tl = t[#t] + for _ = 1, n do + tl[#tl + 1] = {} + end + end + return t +end + +describe('vim.deepcopy()', function() + local function run(name, n, noref) + it(string.format('%s entries=%d noref=%s', name, n, noref), function() + local t = name == 'shared' and build_shared(n) or build_unique(n) + local d = tcall(vim.deepcopy, t, noref) + print(string.format('%.2f ms', d)) + end) + end + + run('unique', 50, false) + run('unique', 50, true) + run('unique', 2000, false) + run('unique', 2000, true) + + run('shared', 50, false) + run('shared', 50, true) + run('shared', 2000, false) + run('shared', 2000, true) +end) |