aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/unit/eval/typval_spec.lua113
1 files changed, 58 insertions, 55 deletions
diff --git a/test/unit/eval/typval_spec.lua b/test/unit/eval/typval_spec.lua
index 926bf1c478..2c9b7c66db 100644
--- a/test/unit/eval/typval_spec.lua
+++ b/test/unit/eval/typval_spec.lua
@@ -606,63 +606,66 @@ describe('typval.c', function()
eq(nil, lib.tv_list_copy(nil, nil, false, 1))
end)
itp('copies list correctly without converting items', function()
- local v = {{['«']='»'}, {'„'}, 1, '“', null_string, null_list, null_dict}
- local l_tv = lua2typvalt(v)
- local l = l_tv.vval.v_list
- local lis = list_items(l)
- alloc_log:clear()
+ do
+ local v = {{['«']='»'}, {'„'}, 1, '“', null_string, null_list, null_dict}
+ local l_tv = lua2typvalt(v)
+ local l = l_tv.vval.v_list
+ local lis = list_items(l)
+ alloc_log:clear()
- eq(1, lis[1].li_tv.vval.v_dict.dv_refcount)
- eq(1, lis[2].li_tv.vval.v_list.lv_refcount)
- local l_copy1 = tv_list_copy(nil, l, false, 0)
- eq(2, lis[1].li_tv.vval.v_dict.dv_refcount)
- eq(2, lis[2].li_tv.vval.v_list.lv_refcount)
- local lis_copy1 = list_items(l_copy1)
- eq(lis[1].li_tv.vval.v_dict, lis_copy1[1].li_tv.vval.v_dict)
- eq(lis[2].li_tv.vval.v_list, lis_copy1[2].li_tv.vval.v_list)
- eq(v, lst2tbl(l_copy1))
- alloc_log:check({
- a.list(l_copy1),
- a.li(lis_copy1[1]),
- a.li(lis_copy1[2]),
- a.li(lis_copy1[3]),
- a.li(lis_copy1[4]),
- a.str(lis_copy1[4].li_tv.vval.v_string, #v[4]),
- a.li(lis_copy1[5]),
- a.li(lis_copy1[6]),
- a.li(lis_copy1[7]),
- })
- lib.tv_list_free(ffi.gc(l_copy1, nil))
- alloc_log:clear()
+ eq(1, lis[1].li_tv.vval.v_dict.dv_refcount)
+ eq(1, lis[2].li_tv.vval.v_list.lv_refcount)
+ local l_copy1 = tv_list_copy(nil, l, false, 0)
+ eq(2, lis[1].li_tv.vval.v_dict.dv_refcount)
+ eq(2, lis[2].li_tv.vval.v_list.lv_refcount)
+ local lis_copy1 = list_items(l_copy1)
+ eq(lis[1].li_tv.vval.v_dict, lis_copy1[1].li_tv.vval.v_dict)
+ eq(lis[2].li_tv.vval.v_list, lis_copy1[2].li_tv.vval.v_list)
+ eq(v, lst2tbl(l_copy1))
+ alloc_log:check({
+ a.list(l_copy1),
+ a.li(lis_copy1[1]),
+ a.li(lis_copy1[2]),
+ a.li(lis_copy1[3]),
+ a.li(lis_copy1[4]),
+ a.str(lis_copy1[4].li_tv.vval.v_string, #v[4]),
+ a.li(lis_copy1[5]),
+ a.li(lis_copy1[6]),
+ a.li(lis_copy1[7]),
+ })
+ lib.tv_list_free(ffi.gc(l_copy1, nil))
+ alloc_log:clear()
- eq(1, lis[1].li_tv.vval.v_dict.dv_refcount)
- eq(1, lis[2].li_tv.vval.v_list.lv_refcount)
- local l_deepcopy1 = tv_list_copy(nil, l, true, 0)
- neq(nil, l_deepcopy1)
- eq(1, lis[1].li_tv.vval.v_dict.dv_refcount)
- eq(1, lis[2].li_tv.vval.v_list.lv_refcount)
- local lis_deepcopy1 = list_items(l_deepcopy1)
- neq(lis[1].li_tv.vval.v_dict, lis_deepcopy1[1].li_tv.vval.v_dict)
- neq(lis[2].li_tv.vval.v_list, lis_deepcopy1[2].li_tv.vval.v_list)
- eq(v, lst2tbl(l_deepcopy1))
- local di_deepcopy1 = first_di(lis_deepcopy1[1].li_tv.vval.v_dict)
- alloc_log:check({
- a.list(l_deepcopy1),
- a.li(lis_deepcopy1[1]),
- a.dict(lis_deepcopy1[1].li_tv.vval.v_dict),
- a.di(di_deepcopy1, #('«')),
- a.str(di_deepcopy1.di_tv.vval.v_string, #v[1]['«']),
- a.li(lis_deepcopy1[2]),
- a.list(lis_deepcopy1[2].li_tv.vval.v_list),
- a.li(lis_deepcopy1[2].li_tv.vval.v_list.lv_first),
- a.str(lis_deepcopy1[2].li_tv.vval.v_list.lv_first.li_tv.vval.v_string, #v[2][1]),
- a.li(lis_deepcopy1[3]),
- a.li(lis_deepcopy1[4]),
- a.str(lis_deepcopy1[4].li_tv.vval.v_string, #v[4]),
- a.li(lis_deepcopy1[5]),
- a.li(lis_deepcopy1[6]),
- a.li(lis_deepcopy1[7]),
- })
+ eq(1, lis[1].li_tv.vval.v_dict.dv_refcount)
+ eq(1, lis[2].li_tv.vval.v_list.lv_refcount)
+ local l_deepcopy1 = tv_list_copy(nil, l, true, 0)
+ neq(nil, l_deepcopy1)
+ eq(1, lis[1].li_tv.vval.v_dict.dv_refcount)
+ eq(1, lis[2].li_tv.vval.v_list.lv_refcount)
+ local lis_deepcopy1 = list_items(l_deepcopy1)
+ neq(lis[1].li_tv.vval.v_dict, lis_deepcopy1[1].li_tv.vval.v_dict)
+ neq(lis[2].li_tv.vval.v_list, lis_deepcopy1[2].li_tv.vval.v_list)
+ eq(v, lst2tbl(l_deepcopy1))
+ local di_deepcopy1 = first_di(lis_deepcopy1[1].li_tv.vval.v_dict)
+ alloc_log:check({
+ a.list(l_deepcopy1),
+ a.li(lis_deepcopy1[1]),
+ a.dict(lis_deepcopy1[1].li_tv.vval.v_dict),
+ a.di(di_deepcopy1, #('«')),
+ a.str(di_deepcopy1.di_tv.vval.v_string, #v[1]['«']),
+ a.li(lis_deepcopy1[2]),
+ a.list(lis_deepcopy1[2].li_tv.vval.v_list),
+ a.li(lis_deepcopy1[2].li_tv.vval.v_list.lv_first),
+ a.str(lis_deepcopy1[2].li_tv.vval.v_list.lv_first.li_tv.vval.v_string, #v[2][1]),
+ a.li(lis_deepcopy1[3]),
+ a.li(lis_deepcopy1[4]),
+ a.str(lis_deepcopy1[4].li_tv.vval.v_string, #v[4]),
+ a.li(lis_deepcopy1[5]),
+ a.li(lis_deepcopy1[6]),
+ a.li(lis_deepcopy1[7]),
+ })
+ end
+ collectgarbage()
end)
itp('copies list correctly and converts items', function()
local vc = ffi.gc(ffi.new('vimconv_T[1]'), function(vc)