mirror of
https://github.com/neovim/neovim.git
synced 2025-11-03 09:14:24 +00:00
vim-patch:9.1.0524: the recursive parameter in the *_equal functions can be removed (#29572)
Problem: the recursive parameter in the *_equal functions can be removed
Solution: Remove the recursive parameter in dict_equal(), list_equal()
object_equal and tv_equal(). Use a comparison of the static
var recursive_cnt == 0 to determine whether or not tv_equal()
has been called recursively (Yinzuo Jiang).
closes: vim/vim#15070
7ccd1a2e85
Co-authored-by: Yinzuo Jiang <jiangyinzuo@foxmail.com>
This commit is contained in:
@@ -1267,26 +1267,19 @@ describe('typval.c', function()
|
||||
local l2 = list()
|
||||
|
||||
-- NULL lists are equal to empty lists
|
||||
eq(true, lib.tv_list_equal(l, nil, true, false))
|
||||
eq(true, lib.tv_list_equal(nil, l, false, false))
|
||||
eq(true, lib.tv_list_equal(nil, l, false, true))
|
||||
eq(true, lib.tv_list_equal(l, nil, true, true))
|
||||
eq(true, lib.tv_list_equal(l, nil, true))
|
||||
eq(true, lib.tv_list_equal(nil, l, false))
|
||||
|
||||
-- NULL lists are equal themselves
|
||||
eq(true, lib.tv_list_equal(nil, nil, true, false))
|
||||
eq(true, lib.tv_list_equal(nil, nil, false, false))
|
||||
eq(true, lib.tv_list_equal(nil, nil, false, true))
|
||||
eq(true, lib.tv_list_equal(nil, nil, true, true))
|
||||
eq(true, lib.tv_list_equal(nil, nil, true))
|
||||
eq(true, lib.tv_list_equal(nil, nil, false))
|
||||
|
||||
-- As well as empty lists
|
||||
eq(true, lib.tv_list_equal(l, l, true, false))
|
||||
eq(true, lib.tv_list_equal(l, l2, false, false))
|
||||
eq(true, lib.tv_list_equal(l2, l, false, true))
|
||||
eq(true, lib.tv_list_equal(l2, l2, true, true))
|
||||
eq(true, lib.tv_list_equal(l, l, true))
|
||||
eq(true, lib.tv_list_equal(l, l2, false))
|
||||
eq(true, lib.tv_list_equal(l2, l, false))
|
||||
eq(true, lib.tv_list_equal(l2, l2, true))
|
||||
end)
|
||||
-- Must not use recursive=true argument in the following tests because it
|
||||
-- indicates that tv_equal_recurse_limit and recursive_cnt were set which
|
||||
-- is essential. This argument will be set when comparing inner lists.
|
||||
itp('compares lists correctly when case is not ignored', function()
|
||||
local l1 = list('abc', { 1, 2, 'Abc' }, 'def')
|
||||
local l2 = list('abc', { 1, 2, 'Abc' })
|
||||
@@ -1298,15 +1291,15 @@ describe('typval.c', function()
|
||||
local l8 = list('abc', nil, 'def')
|
||||
local l9 = list('abc', { 1, 2, nil }, 'def')
|
||||
|
||||
eq(true, lib.tv_list_equal(l1, l1, false, false))
|
||||
eq(false, lib.tv_list_equal(l1, l2, false, false))
|
||||
eq(false, lib.tv_list_equal(l1, l3, false, false))
|
||||
eq(false, lib.tv_list_equal(l1, l4, false, false))
|
||||
eq(false, lib.tv_list_equal(l1, l5, false, false))
|
||||
eq(true, lib.tv_list_equal(l1, l6, false, false))
|
||||
eq(false, lib.tv_list_equal(l1, l7, false, false))
|
||||
eq(false, lib.tv_list_equal(l1, l8, false, false))
|
||||
eq(false, lib.tv_list_equal(l1, l9, false, false))
|
||||
eq(true, lib.tv_list_equal(l1, l1, false))
|
||||
eq(false, lib.tv_list_equal(l1, l2, false))
|
||||
eq(false, lib.tv_list_equal(l1, l3, false))
|
||||
eq(false, lib.tv_list_equal(l1, l4, false))
|
||||
eq(false, lib.tv_list_equal(l1, l5, false))
|
||||
eq(true, lib.tv_list_equal(l1, l6, false))
|
||||
eq(false, lib.tv_list_equal(l1, l7, false))
|
||||
eq(false, lib.tv_list_equal(l1, l8, false))
|
||||
eq(false, lib.tv_list_equal(l1, l9, false))
|
||||
end)
|
||||
itp('compares lists correctly when case is ignored', function()
|
||||
local l1 = list('abc', { 1, 2, 'Abc' }, 'def')
|
||||
@@ -1319,15 +1312,15 @@ describe('typval.c', function()
|
||||
local l8 = list('abc', nil, 'def')
|
||||
local l9 = list('abc', { 1, 2, nil }, 'def')
|
||||
|
||||
eq(true, lib.tv_list_equal(l1, l1, true, false))
|
||||
eq(false, lib.tv_list_equal(l1, l2, true, false))
|
||||
eq(true, lib.tv_list_equal(l1, l3, true, false))
|
||||
eq(false, lib.tv_list_equal(l1, l4, true, false))
|
||||
eq(true, lib.tv_list_equal(l1, l5, true, false))
|
||||
eq(true, lib.tv_list_equal(l1, l6, true, false))
|
||||
eq(true, lib.tv_list_equal(l1, l7, true, false))
|
||||
eq(false, lib.tv_list_equal(l1, l8, true, false))
|
||||
eq(false, lib.tv_list_equal(l1, l9, true, false))
|
||||
eq(true, lib.tv_list_equal(l1, l1, true))
|
||||
eq(false, lib.tv_list_equal(l1, l2, true))
|
||||
eq(true, lib.tv_list_equal(l1, l3, true))
|
||||
eq(false, lib.tv_list_equal(l1, l4, true))
|
||||
eq(true, lib.tv_list_equal(l1, l5, true))
|
||||
eq(true, lib.tv_list_equal(l1, l6, true))
|
||||
eq(true, lib.tv_list_equal(l1, l7, true))
|
||||
eq(false, lib.tv_list_equal(l1, l8, true))
|
||||
eq(false, lib.tv_list_equal(l1, l9, true))
|
||||
end)
|
||||
end)
|
||||
describe('find', function()
|
||||
@@ -2448,8 +2441,8 @@ describe('typval.c', function()
|
||||
end)
|
||||
end)
|
||||
describe('equal()', function()
|
||||
local function tv_dict_equal(d1, d2, ic, recursive)
|
||||
return lib.tv_dict_equal(d1, d2, ic or false, recursive or false)
|
||||
local function tv_dict_equal(d1, d2, ic)
|
||||
return lib.tv_dict_equal(d1, d2, ic or false)
|
||||
end
|
||||
itp('works', function()
|
||||
eq(true, tv_dict_equal(nil, nil))
|
||||
@@ -2494,7 +2487,6 @@ describe('typval.c', function()
|
||||
eq(true, tv_dict_equal(d_kupper_upper, d_kupper_lower, true))
|
||||
eq(false, tv_dict_equal(d_kupper_upper, d_lower, true))
|
||||
eq(false, tv_dict_equal(d_kupper_upper, d_upper, true))
|
||||
eq(true, tv_dict_equal(d_upper, d_upper, true, true))
|
||||
alloc_log:check({})
|
||||
end)
|
||||
end)
|
||||
@@ -2923,26 +2915,19 @@ describe('typval.c', function()
|
||||
local nl = lua2typvalt(null_list)
|
||||
|
||||
-- NULL lists are equal to empty lists
|
||||
eq(true, lib.tv_equal(l, nl, true, false))
|
||||
eq(true, lib.tv_equal(nl, l, false, false))
|
||||
eq(true, lib.tv_equal(nl, l, false, true))
|
||||
eq(true, lib.tv_equal(l, nl, true, true))
|
||||
eq(true, lib.tv_equal(l, nl, true))
|
||||
eq(true, lib.tv_equal(nl, l, false))
|
||||
|
||||
-- NULL lists are equal themselves
|
||||
eq(true, lib.tv_equal(nl, nl, true, false))
|
||||
eq(true, lib.tv_equal(nl, nl, false, false))
|
||||
eq(true, lib.tv_equal(nl, nl, false, true))
|
||||
eq(true, lib.tv_equal(nl, nl, true, true))
|
||||
eq(true, lib.tv_equal(nl, nl, true))
|
||||
eq(true, lib.tv_equal(nl, nl, false))
|
||||
|
||||
-- As well as empty lists
|
||||
eq(true, lib.tv_equal(l, l, true, false))
|
||||
eq(true, lib.tv_equal(l, l2, false, false))
|
||||
eq(true, lib.tv_equal(l2, l, false, true))
|
||||
eq(true, lib.tv_equal(l2, l2, true, true))
|
||||
eq(true, lib.tv_equal(l, l, true))
|
||||
eq(true, lib.tv_equal(l, l2, false))
|
||||
eq(true, lib.tv_equal(l2, l, false))
|
||||
eq(true, lib.tv_equal(l2, l2, true))
|
||||
end)
|
||||
-- Must not use recursive=true argument in the following tests because it
|
||||
-- indicates that tv_equal_recurse_limit and recursive_cnt were set which
|
||||
-- is essential. This argument will be set when comparing inner lists.
|
||||
itp('compares lists correctly when case is not ignored', function()
|
||||
local l1 = lua2typvalt({ 'abc', { 1, 2, 'Abc' }, 'def' })
|
||||
local l2 = lua2typvalt({ 'abc', { 1, 2, 'Abc' } })
|
||||
@@ -2954,15 +2939,15 @@ describe('typval.c', function()
|
||||
local l8 = lua2typvalt({ 'abc', nil, 'def' })
|
||||
local l9 = lua2typvalt({ 'abc', { 1, 2, nil }, 'def' })
|
||||
|
||||
eq(true, lib.tv_equal(l1, l1, false, false))
|
||||
eq(false, lib.tv_equal(l1, l2, false, false))
|
||||
eq(false, lib.tv_equal(l1, l3, false, false))
|
||||
eq(false, lib.tv_equal(l1, l4, false, false))
|
||||
eq(false, lib.tv_equal(l1, l5, false, false))
|
||||
eq(true, lib.tv_equal(l1, l6, false, false))
|
||||
eq(false, lib.tv_equal(l1, l7, false, false))
|
||||
eq(false, lib.tv_equal(l1, l8, false, false))
|
||||
eq(false, lib.tv_equal(l1, l9, false, false))
|
||||
eq(true, lib.tv_equal(l1, l1, false))
|
||||
eq(false, lib.tv_equal(l1, l2, false))
|
||||
eq(false, lib.tv_equal(l1, l3, false))
|
||||
eq(false, lib.tv_equal(l1, l4, false))
|
||||
eq(false, lib.tv_equal(l1, l5, false))
|
||||
eq(true, lib.tv_equal(l1, l6, false))
|
||||
eq(false, lib.tv_equal(l1, l7, false))
|
||||
eq(false, lib.tv_equal(l1, l8, false))
|
||||
eq(false, lib.tv_equal(l1, l9, false))
|
||||
end)
|
||||
itp('compares lists correctly when case is ignored', function()
|
||||
local l1 = lua2typvalt({ 'abc', { 1, 2, 'Abc' }, 'def' })
|
||||
@@ -2975,18 +2960,18 @@ describe('typval.c', function()
|
||||
local l8 = lua2typvalt({ 'abc', nil, 'def' })
|
||||
local l9 = lua2typvalt({ 'abc', { 1, 2, nil }, 'def' })
|
||||
|
||||
eq(true, lib.tv_equal(l1, l1, true, false))
|
||||
eq(false, lib.tv_equal(l1, l2, true, false))
|
||||
eq(true, lib.tv_equal(l1, l3, true, false))
|
||||
eq(false, lib.tv_equal(l1, l4, true, false))
|
||||
eq(true, lib.tv_equal(l1, l5, true, false))
|
||||
eq(true, lib.tv_equal(l1, l6, true, false))
|
||||
eq(true, lib.tv_equal(l1, l7, true, false))
|
||||
eq(false, lib.tv_equal(l1, l8, true, false))
|
||||
eq(false, lib.tv_equal(l1, l9, true, false))
|
||||
eq(true, lib.tv_equal(l1, l1, true))
|
||||
eq(false, lib.tv_equal(l1, l2, true))
|
||||
eq(true, lib.tv_equal(l1, l3, true))
|
||||
eq(false, lib.tv_equal(l1, l4, true))
|
||||
eq(true, lib.tv_equal(l1, l5, true))
|
||||
eq(true, lib.tv_equal(l1, l6, true))
|
||||
eq(true, lib.tv_equal(l1, l7, true))
|
||||
eq(false, lib.tv_equal(l1, l8, true))
|
||||
eq(false, lib.tv_equal(l1, l9, true))
|
||||
end)
|
||||
local function tv_equal(d1, d2, ic, recursive)
|
||||
return lib.tv_equal(d1, d2, ic or false, recursive or false)
|
||||
local function tv_equal(d1, d2, ic)
|
||||
return lib.tv_equal(d1, d2, ic or false)
|
||||
end
|
||||
itp('works with dictionaries', function()
|
||||
local nd = lua2typvalt(null_dict)
|
||||
@@ -3033,7 +3018,6 @@ describe('typval.c', function()
|
||||
eq(true, tv_equal(d_kupper_upper, d_kupper_lower, true))
|
||||
eq(false, tv_equal(d_kupper_upper, d_lower, true))
|
||||
eq(false, tv_equal(d_kupper_upper, d_upper, true))
|
||||
eq(true, tv_equal(d_upper, d_upper, true, true))
|
||||
alloc_log:check({})
|
||||
end)
|
||||
end)
|
||||
|
||||
Reference in New Issue
Block a user