summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-08-07 17:20:16 +0200
committerBram Moolenaar <Bram@vim.org>2021-08-07 17:20:16 +0200
commitdae453f3397a26a53301d7327e6ed43e8b392035 (patch)
tree1b1581368cbfb4f1fe86cb39d84e4b8bf6bae7aa
parent4270d8b7626ff8a7006f6a09c89bc446a3f89d1e (diff)
patch 8.2.3311: Vim9: check for DO_NOT_FREE_CNT is very slowv8.2.3311
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.
-rw-r--r--src/testdir/runtest.vim17
-rw-r--r--src/testdir/test_vim9_expr.vim35
-rw-r--r--src/version.c2
3 files changed, 51 insertions, 3 deletions
diff --git a/src/testdir/runtest.vim b/src/testdir/runtest.vim
index e43dd8d944..2ef0f554fe 100644
--- a/src/testdir/runtest.vim
+++ b/src/testdir/runtest.vim
@@ -13,6 +13,9 @@
" For csh:
" 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:
" export TEST_NO_RETRY=yes
"
@@ -329,13 +332,17 @@ func FinishTesting()
if s:done == 0
if s:filtered > 0
- let message = "NO tests match $TEST_FILTER: '" .. $TEST_FILTER .. "'"
+ if $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
let message = 'NO tests executed'
endif
else
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
let message = 'Executed ' . s:done . (s:done > 1 ? ' tests' : ' test')
endif
@@ -461,6 +468,12 @@ endif
" Execute the tests in alphabetical order.
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!
set belloff=all
let prev_error = ''
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 11e152407f..9ac4d0b1dd 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -2832,14 +2832,47 @@ def Test_expr7_namespace()
assert_equal('some', get(t:, 'some_var', 'xxx'))
assert_equal('xxx', get(t:, 'no_var', 'xxx'))
unlet t:some_var
+ END
+ CheckDefAndScriptSuccess(lines)
+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
- CheckDefAndScriptSuccess(lines)
+ 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()
diff --git a/src/version.c b/src/version.c
index 9c374b1647..d31a019916 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3311,
+/**/
3310,
/**/
3309,