text_spec.lua (1197B)
1 describe('vim.text', function() 2 --- @param t number[] 3 local function mean(t) 4 assert(#t > 0) 5 local sum = 0 6 for _, v in ipairs(t) do 7 sum = sum + v 8 end 9 return sum / #t 10 end 11 12 --- @param t number[] 13 local function median(t) 14 local len = #t 15 if len % 2 == 0 then 16 return t[len / 2] 17 end 18 return t[(len + 1) / 2] 19 end 20 21 --- @param f fun(t: number[]): table<number, number|string|table> 22 local function measure(f, input, N) 23 local stats = {} ---@type number[] 24 for _ = 1, N do 25 local tic = vim.uv.hrtime() 26 f(input) 27 local toc = vim.uv.hrtime() 28 stats[#stats + 1] = (toc - tic) / 1000000 29 end 30 table.sort(stats) 31 print( 32 string.format( 33 '\nN: %d, Min: %0.6f ms, Max: %0.6f ms, Median: %0.6f ms, Mean: %0.6f ms', 34 N, 35 math.min(unpack(stats)), 36 math.max(unpack(stats)), 37 median(stats), 38 mean(stats) 39 ) 40 ) 41 end 42 43 local input, output = string.rep('😂', 2 ^ 16), string.rep('F09F9882', 2 ^ 16) 44 45 it('hexencode', function() 46 measure(vim.text.hexencode, input, 100) 47 end) 48 49 it('hexdecode', function() 50 measure(vim.text.hexdecode, output, 100) 51 end) 52 end)