mirror of
https://github.com/neovim/neovim.git
synced 2024-12-31 17:13:26 -07:00
unittests: Add tv_equal() tests
This commit is contained in:
parent
630ff33dc1
commit
389274bef7
@ -2424,5 +2424,126 @@ describe('typval.c', function()
|
|||||||
'E742: Cannot change value of Unknown'))
|
'E742: Cannot change value of Unknown'))
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
describe('equal()', function()
|
||||||
|
itp('compares empty and NULL lists correctly', function()
|
||||||
|
local l = lua2typvalt(empty_list)
|
||||||
|
local l2 = lua2typvalt(empty_list)
|
||||||
|
local nl = lua2typvalt(null_list)
|
||||||
|
|
||||||
|
-- NULL lists are not equal to empty lists
|
||||||
|
eq(false, lib.tv_equal(l, nl, true, false))
|
||||||
|
eq(false, lib.tv_equal(nl, l, false, false))
|
||||||
|
eq(false, lib.tv_equal(nl, l, false, true))
|
||||||
|
eq(false, lib.tv_equal(l, nl, true, true))
|
||||||
|
|
||||||
|
-- Yet 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))
|
||||||
|
|
||||||
|
-- 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))
|
||||||
|
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'}})
|
||||||
|
local l3 = lua2typvalt({'abc', {1, 2, 'Abc'}, 'Def'})
|
||||||
|
local l4 = lua2typvalt({'abc', {1, 2, 'Abc', 4}, 'def'})
|
||||||
|
local l5 = lua2typvalt({'Abc', {1, 2, 'Abc'}, 'def'})
|
||||||
|
local l6 = lua2typvalt({'abc', {1, 2, 'Abc'}, 'def'})
|
||||||
|
local l7 = lua2typvalt({'abc', {1, 2, 'abc'}, 'def'})
|
||||||
|
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))
|
||||||
|
end)
|
||||||
|
itp('compares lists correctly when case is ignored', function()
|
||||||
|
local l1 = lua2typvalt({'abc', {1, 2, 'Abc'}, 'def'})
|
||||||
|
local l2 = lua2typvalt({'abc', {1, 2, 'Abc'}})
|
||||||
|
local l3 = lua2typvalt({'abc', {1, 2, 'Abc'}, 'Def'})
|
||||||
|
local l4 = lua2typvalt({'abc', {1, 2, 'Abc', 4}, 'def'})
|
||||||
|
local l5 = lua2typvalt({'Abc', {1, 2, 'Abc'}, 'def'})
|
||||||
|
local l6 = lua2typvalt({'abc', {1, 2, 'Abc'}, 'def'})
|
||||||
|
local l7 = lua2typvalt({'abc', {1, 2, 'abc'}, 'def'})
|
||||||
|
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))
|
||||||
|
end)
|
||||||
|
local function tv_equal(d1, d2, ic, recursive)
|
||||||
|
return lib.tv_equal(d1, d2, ic or false, recursive or false)
|
||||||
|
end
|
||||||
|
itp('works with dictionaries', function()
|
||||||
|
local nd = lua2typvalt(null_dict)
|
||||||
|
eq(true, tv_equal(nd, nd))
|
||||||
|
alloc_log:check({})
|
||||||
|
local d1 = lua2typvalt({})
|
||||||
|
alloc_log:check({a.dict(d1.vval.v_dict)})
|
||||||
|
eq(1, d1.vval.v_dict.dv_refcount)
|
||||||
|
eq(false, tv_equal(nd, d1))
|
||||||
|
eq(false, tv_equal(d1, nd))
|
||||||
|
eq(true, tv_equal(d1, d1))
|
||||||
|
eq(1, d1.vval.v_dict.dv_refcount)
|
||||||
|
alloc_log:check({})
|
||||||
|
local d_upper = lua2typvalt({a='TEST'})
|
||||||
|
local dis_upper = dict_items(d_upper.vval.v_dict)
|
||||||
|
local d_lower = lua2typvalt({a='test'})
|
||||||
|
local dis_lower = dict_items(d_lower.vval.v_dict)
|
||||||
|
local d_kupper_upper = lua2typvalt({A='TEST'})
|
||||||
|
local dis_kupper_upper = dict_items(d_kupper_upper.vval.v_dict)
|
||||||
|
local d_kupper_lower = lua2typvalt({A='test'})
|
||||||
|
local dis_kupper_lower = dict_items(d_kupper_lower.vval.v_dict)
|
||||||
|
alloc_log:clear_tmp_allocs()
|
||||||
|
alloc_log:check({
|
||||||
|
a.dict(d_upper.vval.v_dict),
|
||||||
|
a.di(dis_upper.a),
|
||||||
|
a.str(dis_upper.a.di_tv.vval.v_string),
|
||||||
|
|
||||||
|
a.dict(d_lower.vval.v_dict),
|
||||||
|
a.di(dis_lower.a),
|
||||||
|
a.str(dis_lower.a.di_tv.vval.v_string),
|
||||||
|
|
||||||
|
a.dict(d_kupper_upper.vval.v_dict),
|
||||||
|
a.di(dis_kupper_upper.A),
|
||||||
|
a.str(dis_kupper_upper.A.di_tv.vval.v_string),
|
||||||
|
|
||||||
|
a.dict(d_kupper_lower.vval.v_dict),
|
||||||
|
a.di(dis_kupper_lower.A),
|
||||||
|
a.str(dis_kupper_lower.A.di_tv.vval.v_string),
|
||||||
|
})
|
||||||
|
eq(true, tv_equal(d_upper, d_upper))
|
||||||
|
eq(true, tv_equal(d_upper, d_upper, true))
|
||||||
|
eq(false, tv_equal(d_upper, d_lower, false))
|
||||||
|
eq(true, tv_equal(d_upper, d_lower, true))
|
||||||
|
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)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
Loading…
Reference in New Issue
Block a user