0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.3311: Vim9: check for DO_NOT_FREE_CNT is very slow

Problem:    Vim9: check for DO_NOT_FREE_CNT is very slow.
Solution:   Move to a separate function so it can be skipped by setting
            $TEST_SKIP_PAT.
This commit is contained in:
Bram Moolenaar 2021-08-07 17:20:16 +02:00
parent 4270d8b762
commit dae453f339
3 changed files with 56 additions and 8 deletions

View File

@ -13,6 +13,9 @@
" For csh: " For csh:
" setenv TEST_FILTER Test_channel " setenv TEST_FILTER Test_channel
" "
" If the environment variable $TEST_SKIP_PAT is set then test functions
" matching this pattern will be skipped. It's the opposite of $TEST_FILTER.
"
" While working on a test you can make $TEST_NO_RETRY non-empty to not retry: " While working on a test you can make $TEST_NO_RETRY non-empty to not retry:
" export TEST_NO_RETRY=yes " export TEST_NO_RETRY=yes
" "
@ -329,13 +332,17 @@ func FinishTesting()
if s:done == 0 if s:done == 0
if s:filtered > 0 if s:filtered > 0
if $TEST_FILTER != ''
let message = "NO tests match $TEST_FILTER: '" .. $TEST_FILTER .. "'" let message = "NO tests match $TEST_FILTER: '" .. $TEST_FILTER .. "'"
else
let message = "ALL tests match $TEST_SKIP_PAT: '" .. $TEST_SKIP_PAT .. "'"
endif
else else
let message = 'NO tests executed' let message = 'NO tests executed'
endif endif
else else
if s:filtered > 0 if s:filtered > 0
call add(s:messages, "Filtered " .. s:filtered .. " tests with $TEST_FILTER") call add(s:messages, "Filtered " .. s:filtered .. " tests with $TEST_FILTER and $TEST_SKIP_PAT")
endif endif
let message = 'Executed ' . s:done . (s:done > 1 ? ' tests' : ' test') let message = 'Executed ' . s:done . (s:done > 1 ? ' tests' : ' test')
endif endif
@ -461,6 +468,12 @@ endif
" Execute the tests in alphabetical order. " Execute the tests in alphabetical order.
for g:testfunc in sort(s:tests) for g:testfunc in sort(s:tests)
if $TEST_SKIP_PAT != '' && g:testfunc =~ $TEST_SKIP_PAT
call add(s:messages, g:testfunc .. ' matches $TEST_SKIP_PAT')
let s:filtered += 1
continue
endif
" Silence, please! " Silence, please!
set belloff=all set belloff=all
let prev_error = '' let prev_error = ''

View File

@ -2832,16 +2832,49 @@ def Test_expr7_namespace()
assert_equal('some', get(t:, 'some_var', 'xxx')) assert_equal('some', get(t:, 'some_var', 'xxx'))
assert_equal('xxx', get(t:, 'no_var', 'xxx')) assert_equal('xxx', get(t:, 'no_var', 'xxx'))
unlet t:some_var unlet t:some_var
# check using g: in a for loop more than DO_NOT_FREE_CNT times
for i in range(100000)
if has_key(g:, 'does-not-exist')
endif
endfor
END END
CheckDefAndScriptSuccess(lines) CheckDefAndScriptSuccess(lines)
enddef enddef
def Test_expr7_namespace_loop_def()
var lines =<< trim END
# check using g: in a for loop more than DO_NOT_FREE_CNT times
var exists = 0
var exists_not = 0
for i in range(100000)
if has_key(g:, 'does-not-exist')
exists += 1
else
exists_not += 1
endif
endfor
assert_equal(0, exists)
assert_equal(100000, exists_not)
END
CheckDefSuccess(lines)
enddef
" NOTE: this is known to be slow. To skip use:
" :let $TEST_SKIP_PAT = 'Test_expr7_namespace_loop_script'
def Test_expr7_namespace_loop_script()
var lines =<< trim END
vim9script
# check using g: in a for loop more than DO_NOT_FREE_CNT times
var exists = 0
var exists_not = 0
for i in range(100000)
if has_key(g:, 'does-not-exist')
exists += 1
else
exists_not += 1
endif
endfor
assert_equal(0, exists)
assert_equal(100000, exists_not)
END
CheckScriptSuccess(lines)
enddef
def Test_expr7_parens() def Test_expr7_parens()
# (expr) # (expr)
var lines =<< trim END var lines =<< trim END

View File

@ -755,6 +755,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
3311,
/**/ /**/
3310, 3310,
/**/ /**/