mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			143 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local t = require('test.testutil')
 | |
| local n = require('test.functional.testnvim')()
 | |
| local clear = n.clear
 | |
| local exec_lua = n.exec_lua
 | |
| local eq = t.eq
 | |
| 
 | |
| describe('vim.func._memoize', function()
 | |
|   before_each(clear)
 | |
| 
 | |
|   it('caches function results based on their parameters', function()
 | |
|     exec_lua([[
 | |
|       _G.count = 0
 | |
| 
 | |
|       local adder = vim.func._memoize('concat', function(arg1, arg2)
 | |
|         _G.count = _G.count + 1
 | |
|         return arg1 + arg2
 | |
|       end)
 | |
| 
 | |
|       collectgarbage('stop')
 | |
|       adder(3, -4)
 | |
|       adder(3, -4)
 | |
|       adder(3, -4)
 | |
|       adder(3, -4)
 | |
|       adder(3, -4)
 | |
|       collectgarbage('restart')
 | |
|     ]])
 | |
| 
 | |
|     eq(1, exec_lua([[return _G.count]]))
 | |
|   end)
 | |
| 
 | |
|   it('caches function results using a weak table by default', function()
 | |
|     exec_lua([[
 | |
|       _G.count = 0
 | |
| 
 | |
|       local adder = vim.func._memoize('concat-2', function(arg1, arg2)
 | |
|         _G.count = _G.count + 1
 | |
|         return arg1 + arg2
 | |
|       end)
 | |
| 
 | |
|       adder(3, -4)
 | |
|       collectgarbage()
 | |
|       adder(3, -4)
 | |
|       collectgarbage()
 | |
|       adder(3, -4)
 | |
|     ]])
 | |
| 
 | |
|     eq(3, exec_lua([[return _G.count]]))
 | |
|   end)
 | |
| 
 | |
|   it('can cache using a strong table', function()
 | |
|     exec_lua([[
 | |
|       _G.count = 0
 | |
| 
 | |
|       local adder = vim.func._memoize('concat-2', function(arg1, arg2)
 | |
|         _G.count = _G.count + 1
 | |
|         return arg1 + arg2
 | |
|       end, false)
 | |
| 
 | |
|       adder(3, -4)
 | |
|       collectgarbage()
 | |
|       adder(3, -4)
 | |
|       collectgarbage()
 | |
|       adder(3, -4)
 | |
|     ]])
 | |
| 
 | |
|     eq(1, exec_lua([[return _G.count]]))
 | |
|   end)
 | |
| 
 | |
|   it('can clear a single cache entry', function()
 | |
|     exec_lua([[
 | |
|       _G.count = 0
 | |
| 
 | |
|       local adder = vim.func._memoize(function(arg1, arg2)
 | |
|         return tostring(arg1) .. '%%' .. tostring(arg2)
 | |
|       end, function(arg1, arg2)
 | |
|         _G.count = _G.count + 1
 | |
|         return arg1 + arg2
 | |
|       end)
 | |
| 
 | |
|       collectgarbage('stop')
 | |
|       adder(3, -4)
 | |
|       adder(3, -4)
 | |
|       adder(3, -4)
 | |
|       adder(3, -4)
 | |
|       adder(3, -4)
 | |
|       adder:clear(3, -4)
 | |
|       adder(3, -4)
 | |
|       collectgarbage('restart')
 | |
|     ]])
 | |
| 
 | |
|     eq(2, exec_lua([[return _G.count]]))
 | |
|   end)
 | |
| 
 | |
|   it('can clear the entire cache', function()
 | |
|     exec_lua([[
 | |
|       _G.count = 0
 | |
| 
 | |
|       local adder = vim.func._memoize(function(arg1, arg2)
 | |
|         return tostring(arg1) .. '%%' .. tostring(arg2)
 | |
|       end, function(arg1, arg2)
 | |
|         _G.count = _G.count + 1
 | |
|         return arg1 + arg2
 | |
|       end)
 | |
| 
 | |
|       collectgarbage('stop')
 | |
|       adder(1, 2)
 | |
|       adder(3, -4)
 | |
|       adder(1, 2)
 | |
|       adder(3, -4)
 | |
|       adder(1, 2)
 | |
|       adder(3, -4)
 | |
|       adder:clear()
 | |
|       adder(1, 2)
 | |
|       adder(3, -4)
 | |
|       collectgarbage('restart')
 | |
|     ]])
 | |
| 
 | |
|     eq(4, exec_lua([[return _G.count]]))
 | |
|   end)
 | |
| 
 | |
|   it('can cache functions that return nil', function()
 | |
|     exec_lua([[
 | |
|       _G.count = 0
 | |
| 
 | |
|       local adder = vim.func._memoize('concat', function(arg1, arg2)
 | |
|         _G.count = _G.count + 1
 | |
|         return nil
 | |
|       end)
 | |
| 
 | |
|       collectgarbage('stop')
 | |
|       adder(1, 2)
 | |
|       adder(1, 2)
 | |
|       adder(1, 2)
 | |
|       adder(1, 2)
 | |
|       adder:clear()
 | |
|       adder(1, 2)
 | |
|       collectgarbage('restart')
 | |
|     ]])
 | |
| 
 | |
|     eq(2, exec_lua([[return _G.count]]))
 | |
|   end)
 | |
| end)
 | 
