mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| -- Test suite for vim.list
 | |
| local t = require('test.testutil')
 | |
| local eq = t.eq
 | |
| 
 | |
| describe('vim.list', function()
 | |
|   it('vim.list.unique()', function()
 | |
|     eq({ 1, 2, 3, 4, 5 }, vim.list.unique({ 1, 2, 2, 3, 4, 4, 5 }))
 | |
|     eq({ 1, 2, 3, 4, 5 }, vim.list.unique({ 1, 2, 3, 4, 4, 5, 1, 2, 3, 2, 1, 2, 3, 4, 5 }))
 | |
|     eq({ 1, 2, 3, 4, 5, field = 1 }, vim.list.unique({ 1, 2, 2, 3, 4, 4, 5, field = 1 }))
 | |
| 
 | |
|     -- Not properly defined, but test anyway
 | |
|     -- luajit evaluates #t as 7, whereas Lua 5.1 evaluates it as 12
 | |
|     local r = vim.list.unique({ 1, 2, 2, 3, 4, 4, 5, nil, 6, 6, 7, 7 })
 | |
|     if jit then
 | |
|       eq({ 1, 2, 3, 4, 5, nil, nil, nil, 6, 6, 7, 7 }, r)
 | |
|     else
 | |
|       eq({ 1, 2, 3, 4, 5, nil, 6, 7 }, r)
 | |
|     end
 | |
| 
 | |
|     eq(
 | |
|       { { 1 }, { 2 }, { 3 } },
 | |
|       vim.list.unique({ { 1 }, { 1 }, { 2 }, { 2 }, { 3 }, { 3 } }, function(x)
 | |
|         return x[1]
 | |
|       end)
 | |
|     )
 | |
|   end)
 | |
| 
 | |
|   --- Generate a list like { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ...}.
 | |
|   ---@param num integer
 | |
|   local function gen_list(num)
 | |
|     ---@type integer[]
 | |
|     local list = {}
 | |
|     for i = 1, num do
 | |
|       for _ = 1, i do
 | |
|         list[#list + 1] = i
 | |
|       end
 | |
|     end
 | |
|     return list
 | |
|   end
 | |
| 
 | |
|   --- Index of the last {num}.
 | |
|   --- Mathematically, a triangular number.
 | |
|   ---@param num integer
 | |
|   local function index(num)
 | |
|     return math.floor((math.pow(num, 2) + num) / 2)
 | |
|   end
 | |
| 
 | |
|   it("vim.list.bisect(..., { bound = 'lower' })", function()
 | |
|     local num = math.random(100)
 | |
|     local list = gen_list(num)
 | |
| 
 | |
|     local target = math.random(num)
 | |
|     eq(vim.list.bisect(list, target, { bound = 'lower' }), index(target - 1) + 1)
 | |
|     eq(vim.list.bisect(list, num + 1, { bound = 'lower' }), index(num) + 1)
 | |
|   end)
 | |
| 
 | |
|   it("vim.list.bisect(..., bound = { 'upper' })", function()
 | |
|     local num = math.random(100)
 | |
|     local list = gen_list(num)
 | |
| 
 | |
|     local target = math.random(num)
 | |
|     eq(vim.list.bisect(list, target, { bound = 'upper' }), index(target) + 1)
 | |
|     eq(vim.list.bisect(list, num + 1, { bound = 'upper' }), index(num) + 1)
 | |
|   end)
 | |
| end)
 | 
