tests: load-adjust timer tests (oldtest)

This commit is contained in:
Marco Hinz
2019-01-16 21:20:38 +01:00
parent 9d6bffd517
commit 0afd452ef1
4 changed files with 54 additions and 11 deletions

30
src/nvim/testdir/load.vim Normal file
View File

@@ -0,0 +1,30 @@
function! s:load_factor() abort
let timeout = 200
let times = []
for _ in range(5)
let g:val = 0
call timer_start(timeout, {-> nvim_set_var('val', 1)})
let start = reltime()
while 1
sleep 10m
if g:val == 1
let g:waited_in_ms = float2nr(reltimefloat(reltime(start)) * 1000)
break
endif
endwhile
call insert(times, g:waited_in_ms, 0)
endfor
let longest = max(times)
let factor = (longest + 50.0) / timeout
return factor
endfunction
" Compute load factor only once.
let s:load_factor = s:load_factor()
function! LoadAdjust(num) abort
return float2nr(ceil(a:num * s:load_factor))
endfunction

View File

@@ -18,6 +18,8 @@ func Test_vim_did_enter()
endfunc endfunc
if has('timers') if has('timers')
source load.vim
func ExitInsertMode(id) func ExitInsertMode(id)
call feedkeys("\<Esc>") call feedkeys("\<Esc>")
endfunc endfunc
@@ -29,7 +31,7 @@ if has('timers')
let g:triggered = 0 let g:triggered = 0
au CursorHoldI * let g:triggered += 1 au CursorHoldI * let g:triggered += 1
set updatetime=20 set updatetime=20
call timer_start(100, 'ExitInsertMode') call timer_start(LoadAdjust(100), 'ExitInsertMode')
call feedkeys('a', 'x!') call feedkeys('a', 'x!')
call assert_equal(1, g:triggered) call assert_equal(1, g:triggered)
au! CursorHoldI au! CursorHoldI
@@ -40,7 +42,7 @@ if has('timers')
let g:triggered = 0 let g:triggered = 0
au CursorHoldI * let g:triggered += 1 au CursorHoldI * let g:triggered += 1
set updatetime=20 set updatetime=20
call timer_start(100, 'ExitInsertMode') call timer_start(LoadAdjust(100), 'ExitInsertMode')
" CursorHoldI does not trigger after CTRL-X " CursorHoldI does not trigger after CTRL-X
call feedkeys("a\<C-X>", 'x!') call feedkeys("a\<C-X>", 'x!')
call assert_equal(0, g:triggered) call assert_equal(0, g:triggered)

View File

@@ -23,6 +23,8 @@ function! Test_lambda_with_timer()
return return
endif endif
source load.vim
let s:n = 0 let s:n = 0
let s:timer_id = 0 let s:timer_id = 0
function! s:Foo() function! s:Foo()
@@ -31,15 +33,19 @@ function! Test_lambda_with_timer()
endfunction endfunction
call s:Foo() call s:Foo()
sleep 210ms sleep 210m
" do not collect lambda " do not collect lambda
call test_garbagecollect_now() call test_garbagecollect_now()
let m = s:n let m = LoadAdjust(s:n)
sleep 230ms sleep 230m
call timer_stop(s:timer_id) call timer_stop(s:timer_id)
let n = LoadAdjust(s:n)
let nine = LoadAdjust(9)
call assert_true(m > 1) call assert_true(m > 1)
call assert_true(s:n > m + 1) call assert_true(n > m + 1)
call assert_true(s:n < 9) call assert_true(n < nine)
endfunction endfunction
function! Test_lambda_with_partial() function! Test_lambda_with_partial()

View File

@@ -5,6 +5,7 @@ if !has('timers')
endif endif
source shared.vim source shared.vim
source load.vim
func MyHandler(timer) func MyHandler(timer)
let g:val += 1 let g:val += 1
@@ -14,13 +15,17 @@ func MyHandlerWithLists(lists, timer)
let x = string(a:lists) let x = string(a:lists)
endfunc endfunc
func s:assert_inrange(lower, upper, actual)
return assert_inrange(a:lower, LoadAdjust(a:upper), a:actual)
endfunc
func Test_oneshot() func Test_oneshot()
let g:val = 0 let g:val = 0
let timer = timer_start(50, 'MyHandler') let timer = timer_start(50, 'MyHandler')
let slept = WaitFor('g:val == 1') let slept = WaitFor('g:val == 1')
call assert_equal(1, g:val) call assert_equal(1, g:val)
if has('reltime') if has('reltime')
call assert_inrange(40, 120, slept) call s:assert_inrange(40, 120, slept)
else else
call assert_inrange(20, 120, slept) call assert_inrange(20, 120, slept)
endif endif
@@ -32,7 +37,7 @@ func Test_repeat_three()
let slept = WaitFor('g:val == 3') let slept = WaitFor('g:val == 3')
call assert_equal(3, g:val) call assert_equal(3, g:val)
if has('reltime') if has('reltime')
call assert_inrange(120, 250, slept) call s:assert_inrange(120, 250, slept)
else else
call assert_inrange(80, 200, slept) call assert_inrange(80, 200, slept)
endif endif
@@ -58,7 +63,7 @@ func Test_with_partial_callback()
let slept = WaitFor('g:val == 1') let slept = WaitFor('g:val == 1')
call assert_equal(1, g:val) call assert_equal(1, g:val)
if has('reltime') if has('reltime')
call assert_inrange(40, 130, slept) call s:assert_inrange(40, 130, slept)
else else
call assert_inrange(20, 100, slept) call assert_inrange(20, 100, slept)
endif endif
@@ -121,7 +126,7 @@ func Test_paused()
let slept = WaitFor('g:val == 1') let slept = WaitFor('g:val == 1')
call assert_equal(1, g:val) call assert_equal(1, g:val)
if has('reltime') if has('reltime')
call assert_inrange(0, 140, slept) call s:assert_inrange(0, 140, slept)
else else
call assert_inrange(0, 10, slept) call assert_inrange(0, 10, slept)
endif endif